我有这个对象结构:
[DataContract]
[KnownType(typeof(ChildClassA))]
[KnownType(typeof(ChildClassB))]
public class MainClass
{
[DataMember]
public string PropA { get; set; }
[DataMember]
public IList<IMyInterface> GenericInterfaceList { get; set; }
//....
}
public interface IMyInterface
{
int Id { get; set; }
//....
}
[DataContract]
public abstract class BaseClass : IMyInterface
{
[DataMember]
public int Id { get; set; }
//....
}
[DataContract]
public class ChildClassA : BaseClass
{
//....
}
[DataContract]
public class ChildClassB : BaseClass
{
//.....
}
我希望DataContractSerializer
为我的通用接口列表发出一个没有a:anyType i:type=
的Xml:
<MainClass xmlns="MYNAMESPACE" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<PropA> dfgdsfg gsd</PropA>
<GenericInterfaceList xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<ChildClassA>
<Id>1</Id>
</ChildClassA>
<ChildClassB>
<Id>2</Id>
</ChildClassB>
</GenericInterfaceList>
</MainClass>
而不是:
<MainClass xmlns="MYNAMESPACE" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<PropA> dfgdsfg gsd</PropA>
<GenericInterfaceList xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<a:anyType i:type="ChildClassA">
<Id>1</Id>
</a:anyType>
<a:anyType i:type="ChildClassB">
<Id>2</Id>
</a:anyType>
</GenericInterfaceList>
</MainClass>
我尝试使用自定义DataContractResolver
,但它不是正确的工具。无法找到缩小Xml的方法。
答案 0 :(得分:0)
我找不到方法,因为没有。
DataContractSerializer不允许太多控制:您可以定义 非常清楚(使用这种明确的“选择加入”方法)得到的东西 序列化,但你很少或根本无法控制它是如何得到的 序列