我正在尝试创建一个可以序列化以生成以下 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 结构?
最佳答案
使用XmlArrayAttribute和 XmlArrayItemAttribute
[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/