我正在尝试序列化一个可以容纳子类对象的List。我需要它缺少任何父标记,因此List上的XMLElement帮助了它。我的问题是List的反映不知道子标签是什么。
我发现当我将[XmlRoot]标记添加到代表我的根元素的类时,我的问题就出现了。
[XmlRoot("EFilingBatchXML", Namespace = "www.fincen.gov/base", IsNullable = false)]
public class XmlRoot
在此之前List工作,我可以使用[XmlInclude]作为子类,或者在创建XmlSerializer时包含Type []。它有一个小问题,包括属性:
的xsi:type = “孩子”
的xsi:type = “成人”
所以看起来Root标签会导致我的问题,但我也需要知道如何排除这些属性。
例)
[XMLElement("Person")]
public List<Person> PersonList { get; set; }
.
.
PersonList = new List<Person>() {
new Child(), new Adult()
};
我需要它格式化
<root>
...
<Person>
<Person elements>
<Child elements>
</Person>
<Person>
<Person elements>
<Adult elements>
</Person>
...
</root>
我总是收到错误
没想到孩子。使用XmlInclude或SoapInclude属性指定静态未知的类型。
任何帮助都会受到赞赏,因为我的想法已经不多了,并且不知道为什么Type []解决方案对此不起作用。
答案 0 :(得分:0)
请尝试以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
Root root = new Root() {
PersonList = new List<Person>() {
new Person() {
person = "Person1",
child = "Child1"
},
new Person() {
person = "Person2",
adult = "Adult2"
}
}
};
XmlSerializer serializer = new XmlSerializer(typeof(Root));
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter writer = XmlWriter.Create(FILENAME,settings);
serializer.Serialize(writer, root);
}
}
public class Root
{
[XmlElement("Person")]
public List<Person> PersonList { get; set; }
}
public class Person
{
[XmlElement("Person")]
public string person { get; set; }
[XmlElement("Child")]
public string child { get; set; }
[XmlElement("Adult")]
public string adult { get; set; }
}
}