0

我已经通过 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
 }
}
4

1 回答 1

1

我会尝试复制,但马上属性看起来不对...

[DataContact]vs[DataContract]注意缺少的“r”

此外,尽管您的 c# 命名空间不同,但您的 DataContract 命名空间是相同的,并且您有多个同名合同

Name = "CanadianAddress", Namespace = "http://tempuri.org/Types"

于 2010-05-20T18:09:33.620 回答