0

msdn:datacontracts をよく読んでみましたが、以下が機能しない理由がわかりません。ここで何が問題なのですか?ExtendedCanadianAddress が datacontract シリアライザーによって認識されないのはなぜですか?

タイプ 'XYZ.ExtendedCanadianAddress' とデータ コントラクト名 'CanadianAddress: http://tempuri.org/Common/Types ' は想定されていません。たとえば、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 に答える