1

シリアル化の問題で立ち往生しています。私の Silverlight アプリは、ビジネス オブジェクト内の私のプロパティの 1 つを想定しておらず、それに対して何をすべきかわかりません。以前は、以下の例のように KnownTypeAttribute を設定することでこれを解決しましたが、この場合は機能しません。

私は次のようにそれを解決するために使用しました:

[DataContract(Name = "baseClass")]
public class baseClass { }

[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }

[DataContract(Name = "busObj2")]
[KnownType(typeof(busObj1))]
public class busObj2 : baseClass
{
    public busObj1 myObj { get; set; }
}

知っている唯一の違いは、次のように、構造がわずかに異なることです。

[DataContract(Name = "baseClass")]
public class baseClass { }

[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }

[DataContract(Name = "busObj2")]
[KnownType(typeof(busObj1))]
public class busObj2 : baseClass
{
    public busObj1 myObj { get; set; }
}

// This is the class that I want to send via WCF and that cannot be serialized
// because the serializer doesn't expect busObj1.
[DataContract(Name = "busObj3")]
public class busObj3 : busObj2 { }

何が間違っているのかについてのアイデアにとても感謝しています!

よろしく、クラス

4

1 に答える 1

5

基本オブジェクトに既知のタイプ属性を配置する必要があります。

[DataContract(Name = "baseClass")]
[KnownType(typeof(busObj1))]
[KnownType(typeof(busObj2))]
[KnownType(typeof(busObj3))]
[KnownType(typeof(busObj4))]
public class baseClass { }

[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }

[DataContract(Name = "busObj2")]
public class busObj2 : baseClass { }

[DataContract(Name = "busObj3")]
public class busObj3 : busObj1
{
    public busObj2 myObj { get; set; }
}

[DataContract(Name = "busObj4")]
public class busObj4 : busObj3 { }

または、これらの属性でドメイン モデルを汚染したくない場合は、web.config で行うかServiceKnownType、 Service Contract で属性を使用することもできます。

于 2012-06-15T09:27:45.290 に答える