c# - XmlSerializer 添加属性

标签 c# .net winforms

我有这个项目类:

public class Movie
{
    public string VideoId { get; set; }
    public string Title { get; set; }
}

我有List<Movie>这个项目,我使用这个代码序列化到 xml 文件:

string fileName = index + ".xml";
string serializationFile = Path.Combine(dir, fileName);

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;

using (var writer = XmlWriter.Create(serializationFile, settings))
{
    var serializer = new XmlSerializer(typeof(List<Movie>));
    serializer.Serialize(writer, tmpList);
}

这是结果:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfMovie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Movie>
    <VideoId>MyId</VideoId>
    <Title>MyTitle</Title>
  </Movie>
  <Movie>
    <VideoId>MyId1</VideoId>
    <Title>MyTitle1</Title>
  </Movie>
  <Movie>
    <VideoId>MyId2</VideoId>
    <Title>MyTitle2</Title>
  </Movie>
  <Movie>
    <VideoId>MyId3</VideoId>
    <Title>MyTitle3</Title>
  </Movie>
</ArrayOfMovie>

并且可以将属性添加到 ArrayOfMovie节点,像这样:

<ArrayOfMovie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" customattribute='Yes'>

最佳答案

是的,您可以使用 XmlAttribute attribute 来做到这一点.为此,您需要定义自定义属性。它带有代表数组(嵌套在根节点中)的另一个类的价格。如果您对此添加没问题,那么解决方案可能如下所示:

public class ArrayOfMovie
{
    // define the custom attribute
    [XmlAttribute(AttributeName="CustomAttribute")]
    public String Custom { get; set; }
    // define the collection description
    [XmlArray(ElementName="Items")]
    public List<Movie> Items { get; set; }
}

public class Movie
{
    public string VideoId { get; set; }
    public string Title { get; set; }
}

然后像您已经做的那样创建、填充和序列化 - 一件新的事情是填充您的自定义属性:

// create and fill the list
var tmpList = new List<Movie>();
tmpList.Add(new Movie { VideoId = "1", Title = "Movie 1" });
tmpList.Add(new Movie { VideoId = "2", Title = "Movie 2" });
// create the collection
var movies = new ArrayOfMovie 
            { 
                Items = tmpList, 
                Custom = "yes" // fill the custom attribute
            };
// serialize
using (var writer = XmlWriter.Create(serializationFile, settings))
{
    var serializer = new XmlSerializer(typeof(ArrayOfMovie));
    serializer.Serialize(writer, movies);
}

XML 输出如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfMovie   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                CustomAttribute="yes">
  <Items>
    <Movie>
      <VideoId>1</VideoId>
      <Title>Movie 1</Title>
    </Movie>
    <Movie>
      <VideoId>2</VideoId>
      <Title>Movie 2</Title>
    </Movie>
  </Items>
</ArrayOfMovie>

关于c# - XmlSerializer 添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22435755/

相关文章:

c# - 如何检查 URL 是否在您的网络应用程序中

.net - 为什么安装了 .NET 4 的计算机无法运行针对 .NET 4.5 的 exe,而它们使用相同的 CLR 版本?

c# - Winforms,如何以相同的形式分隔用户控件上的选项卡索引?

c# - 扩展方法冲突

c# - 将 T01D163DE49AED860 转换为日期时间?

c# - 如何将单词放入变量并检查它是否与数据库中的数据匹配

.net - 在 Visual Studio Express 2010 版本中是否有一种简单的方法来提取接口(interface)?

c# - 在 Linux 上开发 C#

c# - 在 Richtextbox 控件中将超链接显示为纯文本

c# - Web 浏览器组件是 IE7 不是 IE8?如何改变这个?