3

私は次のようなWCFサービスを持っています:

[ServiceContract]
ServiceInterface
{
    [OperationContract]
    FirstResponse FirstOperation(){}

    [OperationContract]
    SecondResponse SecondOperation(){}
}

クライアント側で XML の応答が必要です。私の知る限り、それはを使用しますDataContractSerializer。しかし、FirstReponse には、XML の属性として必要なデータ メンバーがあります。読みましたDataContractSerializerが、サポートしていません。解決策は を使用することXmlSerializerですが、効率が低下します。XmlSerializerそのため、 1回の操作だけDataContractSerializerで残りのサービスに使用できるかどうかを知りたい. はいの場合、どのように?FirstResponse クラスを次のように考えます。

[DataContract]
public class FirstResponse
{
    [DataMember]
    public int id;

    [DataMember]
    public string type1;
}

属性として id が必要です。

4

1 に答える 1

1

メソッドをXmlSerializerFormat属性XmlSerializerで装飾することにより、シリアル化に使用する必要があることを指定できます。

[ServiceContract]
ServiceInterface
{
    [OperationContract]
    [XmlSerializerFormat]
    FirstResponse FirstOperation(){}

    [OperationContract]
    SecondResponse SecondOperation(){}
}

FirstResponse編集: XmlSerializer でシリアル化する場合、その型のDataContract/DataMember属性は必要ないことを忘れていました。次のように XmlSerializer 用に設定できます。

public class FirstResponse
{
    [XmlAttribute]
    public int id;

    [XmlElement]
    public string type1;
}

型をシリアライズする方法に基づいて、シリアライゼーション属性を変えることができます。シリアライズしたくないメンバーがある場合、はオプトアウトとは異なり[XmlIgnore]、それらのメンバーを指定する必要があります。XmlSerializerDataContractSerializer

于 2012-08-21T13:10:09.290 に答える