【发布时间】:2014-10-28 15:55:00
【问题描述】:
我已在此处(和其他地方)查看此问题的任何答案,但没有找到任何答案。
我有一个派生自 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 在序列化期间不包含集合的属性。所以我必须进行自定义序列化。
【问题讨论】:
标签: c# xml serialization