使用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 {
}
但我不知道到底是什么样子,这就是我试图弄清楚的。所以,蹩脚的标题,蹩脚的问题,似曾相识,是吗?
我假设您使用的是所谓的"XML序列化"(即System.XML.Serialization命名空间中的XmlSerializer类)。
将这些属性放在items
属性上:
[XmlArray]
[XmlArrayItem(typeof(thing1))]
[XmlArrayItem(typeof(thing2))]
我通常更喜欢使用DataContractSerializer
和KnownTypeAttribute
。但在您的情况下,由于您使用的是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类。。明白了吗?