使用C#将命名类的列表转换为XML元素的子级

本文关键字:XML 元素 转换 列表 使用 | 更新日期: 2023-09-27 18:19:58

给定以下XML块:

<stuff>
  <items>
    <thing1>stuff</thing1>
    <thing1>blah</thing1>
    <thing2>meh ..</thing2>
    <thing1>again</thing1>
  </items>
</stuff>

假设我有这样的类:

public class thing1 { //handle members of the XML here no sweat }
public class thing2 { //handle members of the XML here no sweat }
public class stuff { public ListOfStuff items { get; set; } }

如何定义ListOfStuff以使其工作?


顺便说一句,这似乎是我试图解决的一个减少的问题,因为我已经对"东西"进行了序列化,而对第一和第二件事,它正在寻找一种方法来放置许多不同类型的东西1和东西2(根据消息的不同,我真的有大约30个项目要像那样序列化到XML中)。我很确定我以前见过它,它看起来像这样:

[SomeAttribute(typeof(thing1))]
[SomeAttribute(typeof(thing2))]
public class ListOfStuff {
}

但我不知道到底是什么样子,这就是我试图弄清楚的。所以,蹩脚的标题,蹩脚的问题,似曾相识,是吗?

使用C#将命名类的列表转换为XML元素的子级

我假设您使用的是所谓的"XML序列化"(即System.XML.Serialization命名空间中的XmlSerializer类)。

将这些属性放在items属性上:

    [XmlArray]
    [XmlArrayItem(typeof(thing1))]
    [XmlArrayItem(typeof(thing2))]

我通常更喜欢使用DataContractSerializerKnownTypeAttribute。但在您的情况下,由于您使用的是XmlSerializer,您可以尝试使用XmlIncludeAttribute

链接:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlincludeattribute.aspx

为什么不解析xml,继续使用反射(即Activator.CreateInstance方法)创建对象,并将其放入ListOfStuff中,该ListOfStuft包含一个stuff对象列表,而该ListOfStuff对象内部包含list of things,假设thing1和thing2派生自things类。。明白了吗?