【发布时间】:2016-09-21 10:27:25
【问题描述】:
我有两节课
[DataContract, KnownType(typeof(B))]
public class A
{
[DataMember]
public string prop1 { get; set; }
[DataMember]
public string prop2 { get; set; }
[DataMember]
public string prop3 { get; set; }
}
[DataContract]
public class B : A
{
[DataMember]
public string prop4 { get; set; }
}
还有以下方法:
List<B> BList = new List<B>();
BList = new List<B>() { new B() { prop1 = "1", prop2 = "2", prop3 = "3", prop4 = "4" } };
List<A> AList = BList.Cast<A>().ToList();
DataContractSerializer ser = new DataContractSerializer(typeof(List<A>));
FileStream fs = new FileStream(@"C:\temp\AResult.xml", FileMode.Create);
using (fs)
{
ser.WriteObject(fs, AList);
}
将其写入输出的 XML 文件:
<ArrayOfProgram.A xmlns="http://schemas.datacontract.org/2004/07/foo" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Program.A i:type="Program.B">
<prop1>1</prop1>
<prop2>2</prop2>
<prop3>3</prop3>
<prop4>4</prop4>
</Program.A></ArrayOfProgram.A>
如何发生这种情况,prop4 在结果中,我该如何避免这种情况? prop4 不是正在序列化的List<A> 的一部分。
【问题讨论】:
-
prop4不是A类的一部分,但List<A>可以存储B类型的对象,因此当您序列化List<A>的元素时,序列化程序将采用存储的实际类型(不仅仅是列表的元素类型)。
标签: c# xml inheritance datacontractserializer