首页 文章

C#继承DataContract派生类型

提问于
浏览
0

我通过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 回答

  • 1

    我会尝试一个repro,但是直接蝙蝠属性看起来不对...

    [DataContact] vs [DataContract] 注意缺少"r"

    此外,虽然您的c#名称空间不同,但您的DataContract名称空间是相同的,并且您有多个具有相同名称的 Contract

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

相关问题