【发布时间】:2011-10-21 09:28:56
【问题描述】:
顺序序列化-反序列化-序列化TestClass时遇到问题:
[Serializable]
public class TestClass
{
public TestClass() { }
public Foo Foo { get; set; }
}
[XmlInclude(typeof(Bar))]
[Serializable]
public abstract class Foo
{
[XmlAnyAttribute]
public List<XmlAttribute> AnyAttr;
}
[Serializable]
public class Bar : Foo
{
}
void Test()
{
var test = new TestClass { Foo = new Bar() };
Console.WriteLine(test.Foo.AnyAttr == null);//true
var firstXml = Helper.SerializeToXml(test);
Console.WriteLine(Regex.Matches(firstXml, "xsi:type=").Count);//1
var deserialiezedObject = Helper.DeserializeFromXml<TestClass>(firstXml);
Console.WriteLine(deserialiezedObject.Foo.AnyAttr.Count);//1
Console.WriteLine(deserialiezedObject.Foo.AnyAttr[0].Name);//xsi:type
var secondXml = Helper.SerializeToXml(deserialiezedObject);
Console.WriteLine(Regex.Matches(secondXml, "xsi:type=").Count);//2
//var secondDeserialiezedObject = Helper.DeserializeFromXml<TestClass>(secondXml); //InvalidOperationException
}
如您所见,反序列化填充了 AnyAttr 数组(一个元素 - “xsi:type”)。
在我们序列化反序列化对象之后发生了奇怪的事情。它在 Foo 标记中生成两次“xsi:type”。
这是一个 XmlSerializer 错误还是我应该以某种方式自己管理(例如,在反序列化后从 AnyAttr 中删除“xsi:type”)AnyAttr?
我有一堆包含 AnyAttr 字段的自动生成的类。
您能否建议如何在没有“xsi:type”重复的情况下序列化这样的对象?
【问题讨论】:
标签: .net xml-serialization xmlserializer