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
}
}