【发布时间】:2010-05-20 17:44:37
【问题描述】:
我已经通过 msdn:datacontracts 进行了公平的阅读,但我无法找出以下内容不起作用的原因。 那么这里出了什么问题? 为什么 Datacontract 序列化程序无法识别 ExtendedCanadianAddress?
不应使用数据合同名称“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
}
}
【问题讨论】:
标签: c# wcf datacontractserializer datacontract