c# - 将自定义对象序列化为 XML

标签 c# xml serialization

我正在尝试创建一个可以序列化以生成以下 XML 的类:

<chart palette='1'>
  <categories>
    <category label='2001' />
    <category label='2002' />

..等等

我有一个看起来像这样的类:

[XmlRoot("chart")]
public class Chart
{        
    [XmlAttributeAttribute("palette")]
    public string Palette;

    [XmlElement("categories")]
    public List<Category> Categories = new List<Category>();
}

[XmlRoot("category")]
public class Category
{
    [XmlAttributeAttribute("label")]
    public string Label;
}

但是,这不会产生所需的 chart->categories->category@label 结构。 Category 类的 XmlRoot 似乎没有被使用。 这是我从该代码得到的输出:

 <chart palette="2">
  <categories label="2002" /> 
 </chart>

如何获得我想要的 XML 结构?

最佳答案

使用XmlArrayAttributeXmlArrayItemAttribute

[XmlRoot("chart")]
public class Chart
{        
    [XmlAttributeAttribute("palette")]
    public string Palette;

    [XmlArray("categories")]
    [XmlArrayItem("category")]
    public List<Category> Categories = new List<Category>();
}


public class Category
{
    [XmlAttributeAttribute("label")]
    public string Label;
}

有时只创建所需的 xml 结构,然后使用 xsd.exe 从中生成类可能很有用。这必须分两步完成,首先生成一个 xsd 文件,然后从中生成类。

xsd.exe something.xml
xsd.exe something.xsd /classes

这可能不会给出您想要的确切结果(除非您有一个非常好的 xsd,并且不只是从 xml 生成它),但确实提供了一些想法

关于c# - 将自定义对象序列化为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/590914/

相关文章:

Android XML FrameLayout 和 BottomNavigationView

java - Java jar文件执行时如何调用XML文件

asp.net - 集合已修改;枚举操作可能无法执行。但为什么?

c++ - 在关闭 RTTI 的情况下 boost 简单类的序列化 (-fno-rtti)

c# - 获取特定应用程序的屏幕截图

c# - System.InvalidOperationException : 'Expected browser binary location, 但在 C# 中使用 Firefox Selenium 时无法在默认位置找到二进制文件错误

xml - 在 blogger xml 中定义循环计数

Python:将对象保存在文件中

c# - 如何检查 byte[] 是否只包含零?

c# - 将空值传递给日期时间? parameter 获取用随机值填充的参数