我通过msdn:datacontracts得到了公平的阅读,我找不到为什么以下不起作用 . So what is wrong here? 为什么datacontract序列化程序不识别ExtendedCanadianAddress?
不要求输入数据 Contract 名称为“CanadianAddress:http://tempuri.org/Common/Types”的'XYZ.ExtendedCanadianAddress' . 将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中 .
鉴于:
namespace ABC
{
[KnownType(typeof(Address))]
public abstract class Z
{
//stuff
//method that adds all types() in namespace to self
}
[KnownType(typeof(CanadianAddress))]
[DataContract(Name = "Address", Namespace = "http://tempuri.org/Types")]
public class Address : Z
{}
[DataContract(Name = "CanadianAddress", Namespace = "http://tempuri.org/Types")]
public class CanadianAddress : Address
{}
}
namespace XYZ
{
[KnownType(typeof(ExtendedCanadianAddress))
[DataContract(Name = "Address", Namespace = "http://tempuri.org/Types")]
public class ExtendedAddress : Address
{
//this serializes just fine
}
[DataContract(Name = "CanadianAddress", Namespace = "http://tempuri.org/Types")]
public class ExtendedCanadianAddress : CanadianAddress
{
//will NOT serialize
}
}
1 回答
我会尝试一个repro,但是直接蝙蝠属性看起来不对...
[DataContact]
vs[DataContract]
注意缺少"r"此外,虽然您的c#名称空间不同,但您的DataContract名称空间是相同的,并且您有多个具有相同名称的 Contract
Name = "CanadianAddress", Namespace = "http://tempuri.org/Types"