2016-05-23 8 views
0

私はwcf webserviceで作業しています。このサービスは、サービス参照として追加したサードパーティ製のWebサービスを使用します。 ここでは、独自のクラスを定義してマッピングを行うことなく、このproxyクライアントの一部のプロパティをwcfserviceを使用するクライアントに公開したいと考えています。自動生成されたプロキシプロパティで[DataMember]を設定する方法

自動生成コードは部分クラスとして行われます。

public partial class Person : object, 
    System.ComponentModel.INotifyPropertyChanged 
     { 
     public string FirstName; 
     public string LastName; 
... 
     } 

これらのプロパティは、MetadataType-Attributeを使用し、プロパティに[DataMember] -Attributeを追加することでオーバーライドしようとしました。しかし、この継ぎ目はEFのためだけに働く。

[DataContract] 
[MetadataType(typeof(PersonMetaData))] 
public partial class Person 
{ 
    [DataMember] 
    public string FirstName { get; set; } 

    [DataMember] 
    public string LastName { get; set; } 
} 

public class PersonMetaData 
{ 
    [DataMember] 
    public string FirstName { get; set; } 

    [DataMember] 
    public string LastName { get; set; } 
} 

インターフェイスを実装しようとすると、クライアントでプロパティが表示されませんでした。

[DataContract] 
public partial class Person : IPerson 
{} 

public interface IPerson 
{ 
    [DataMember] 
    string FirstName { get; set; } 

    [DataMember] 
    string LastName { get; set; } 
} 

私のサービスのXmlSerializerで

グイド

+0

コードが自動生成される場合は、何かする必要がありますか?一部の部分クラスを使用しているので、いつでもインターフェースを実装し、インターフェースに[DataMember]属性を定義することができます。次に、そのインタフェースを部分クラスに適用します。 – TravisWhidden

+0

インターフェイスの実装が機能しませんでした。消費するクライアントでは、プロパティは表示されません。 –

答えて

0

はにPropertyChangedイベントの自動生成されたクラスの原因をシリアル化に失敗しました。
私がDataContractSerializerを使用し、[DataContract]で自動生成されたクラスを装飾している場合、アトリビュートは継承できないため、[DataMember]を継承してプロパティを修飾することはできません。

この部分クラスをラッパープロパティで拡張しました。

[DataContract] 
public partial class Person 
{ 
    [DataMember] 
    public string FirstNameWrapper 
    { 
     get 
     { 
      return this.FirstName; 
     } 
     set 
     { 
      this.FirstName = value; 
     } 
    } 
} 
関連する問題