Xml使用嵌套列表的自定义列表的序列化
问题描述:
我已经看过这里(和其他地方)的任何问题的答案,我还没有找到任何东西。Xml使用嵌套列表的自定义列表的序列化
我有一个派生自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,但这些都不起作用。
我也知道这不会正确反序列化。真正的模型比这更复杂;此集合位于另一个对象中,该对象也被标记为可序列化。
行为是一样的:外部列表序列化,但内部没有。我试图缩小这个问题的范围,所以我正在展示这个较小的例子。
在此先感谢!
编辑:它看起来像这是设计,并且XmlSerializer不包括在序列化过程中的集合的属性。所以我不得不做自定义序列化。
答
只要将其标记为已回答,就是在XmlSerializer中设计的。
可能的重复[当一个类从List 继承时,XmlSerializer不会序列化其他属性](http://*.com/questions/5069099/when-a-class-is-inherited-from-列表XmlSerializer的-犯规序列化,其他-ATT) – BartoszKP 2014-10-28 17:19:33