0

コードで定義されている名前でプロパティsvcutilを生成するように指示するスイッチはありますか?DataContractたとえば、次を使用するプロキシを作成する場合DataContract

[DataContract(Namespace = "http://schemas.mynamespace.com/2012/08")]
public class MyDataContract
{
    [DataMember(IsRequired = true, Order = 0)]
    private int _id;

    public int Id
    {
        get { return _id; }
        set { _id = value; }
    }
}

DataContractプロキシで生成されたクラスでこれを取得します。

public partial class MyDataContract : object
{                
    private int _idField;

    [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
    public int _id
    {
        get
        {
            return this._idField;
        }
        set
        {
            this._idField = value;
        }
    }
}

のorderプロパティはDataMemberAttribute、最初の3つのプロパティについても常に省略されMessageContractIDisposable実装は省略されます。

4

2 に答える 2

1

DataMember属性のnameプロパティを使用します

そのような:

[DataMember(Name="myname")]
于 2012-08-29T10:20:45.217 に答える
1

まあ、私は省略されたものについてコメントすることはできませんorderが、私は残りの部分を助けることができるかもしれません:

  • 通常DataMember、フィールドではなく、プロパティで属性を指定します。データコントラクト自体はプロパティとフィールドを区別しませんが、名前、タイプ、必須かどうかなどを認識します。

  • 追加:クリスが言ったこと:[DataMember(Name="whateveryouwant")]フィールド/プロパティ名とは異なる名前を設定できるようになります。私はそのような使用法は好きではありませんが、コードをリファクタリングするときに役立ちますが、それでもAPIとの互換性を維持します。

  • 他のDataContract(および本質的にサポートされている)タイプのみがメッセージとの間でシリアル化されます。 IDisposableは1つではないようです。

  • の継承IDisposableをシリアル化しMessageContractても意味がありません。メッセージコントラクトは、SOAPメッセージの.NET表現です。文字通り、SOAPメッセージXMLにあるものとアクセス可能な.NETタイプとの間に1:1のマッピングを提供する以外に何もする必要はありません。

    メッセージはの一部でありServiceContract、有効な呼び出しであるために特定の操作に送信する必要のあるメッセージの種類を指定し、別の(応答)メッセージコントラクトは、操作が返すデータがどのように構造化されるかを指定します。他には何もありません。それはデータ集合体です。

クライアントでのサービス操作の結果をキャプチャし、便宜上、スコープ外に出たとき(またはサービスからの登録解除など)にメッセージを自動的に送り返す場合は、クライアント側でこれを実装する必要があります。 。ただし、サービスがこれを要求してはならないことに注意してください(接続の喪失、クラッシュなどが原因)。

于 2012-08-29T10:21:26.870 に答える