我已经在这里(以及其他地方)看过这个问题的任何答案,但我还没找到任何答案。
我有一个派生自List的类,并包含另一个List。当我序列化为XML时,不包括内部集合的内容。
这是一个非常简单的例子:
[Serializable()]
public class MyList<T> : List<T>
{
protected List<T> _nestedList= new List<T>();
public List<T> NestedList
{
get { return _nestedList; }
set { _nestedList = value; }
}
}
class Program
{
static void Main(string[] args)
{
MyList<int> ints = new MyList<int>();
ints.Add(1);
ints.Add(2);
ints.NestedList.Add(3);
ints.NestedList.Add(4);
string xml;
var xmlSerializer = new XmlSerializer(ints.GetType());
using (var memoryStream3 = new MemoryStream())
{
xmlSerializer.Serialize(memoryStream3, ints);
xml = Encoding.UTF8.GetString(memoryStream3.ToArray());
}
}
}
这里是xml字符串:
<?xml version="1.0"?>
<ArrayOfInt xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<int>1</int>
<int>2</int>
</ArrayOfInt>
注意缺少NestedList。
我已尝试过NestedList上的各种属性,例如XmlArray或XmlArrayItem,但那些没有用。
我也知道这不会正确地反序列化。真正的模型比这更复杂;此集合位于另一个对象内,该对象也标记为Serializable。
行为是相同的:外部列表序列化,但内部序列没有。我试图缩小问题的范围,所以我提出了这个较小的例子。
提前致谢!
编辑:看起来这是设计的,并且XmlSerializer在序列化期间不包含集合的属性。所以我必须进行自定义序列化。
答案 0 :(得分:0)
只是为了将其标记为已回答,它是按照XmlSerializer中的设计进行的。