2016-10-25 6 views
0

WCF OData System.Data.Services.Clientのシリアル化されるプロパティの名前を変更できますか。OData DataServiceContextのプロパティの名前を変更します。

私はメールボックスと呼ばれるクラスと、メールボックスとも呼ばれるプロパティを持っています。 このケースでは、Mailboxという名前はコンストラクタ用に予約されているため、これはC#では不可能です。 CSDLのためDataSvcUtil.exeでコードを生成する

ができます: error 0042: Name Mailbox cannot be used in type Mailbox. Member names cannot be the same as their enclosing type.

をだから私は、シリアル化のためのプロパティの名前を変更したいです。私はサーバ属性を試しましたが、どれも働いていませんでした。

[global::System.Data.Services.Common.DataServiceKeyAttribute("ID")] 
public partial class Mailbox 
{ 
    [DataMember(Name = "Mailbox")] 
    [XmlElement(ElementName = "Mailbox")] 
    [JsonProperty(PropertyName = "Mailbox")]  
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")] 
    public string MailBox 
    { 
    get 
    { 
     return this._mailbox; 
    } 
    set 
    { 
     this.OnsMailboxChanging(value); 
     this._mailbox = value; 
     this.OnsMailboxChanged() 
    } 
    } 
    private string _mailbox; 
} 
+0

(自動生成コードではなく)クラス自体のコードを投稿できますか? '[DataMember(Name =" Mailbox2 ")]'などを使用して、シリアライゼーションに別の名前を付けることができるはずです。 – Tim

+0

私はWebサービスを所有していないので、私は元のクラスを持っていません。私はCSDLを持っています:http://pastebin.com/6ascq9YY 次に、このコマンドを使ってクライアントに作成します。"%windir%\ Microsoft.NET \ Framework \ v4.0.30319 \ DataSvcUtil.exe" /言語:CSharp /in:"%cd%/metadata.csdl "/ out:"%cd%/ metadata-auto-generated。 cs " 作成後、コンパイルエラーのためにプロパティの名前を変更する必要があります。しかし、私はwebserviceのためにそれを戻す名前を変更する必要があります。 – Thieme

答えて

0

VBでプロパティと同じ名前のクラスを持つことが許可されているため、コードをVisual Basicに移動することで回避策が見つかりました。私はこの解決策が気に入らないが、少なくとも私はコーディングを続けることができる。

関連する問題