如何在自动生成的代理属性上设置[DataMember]

时间:2016-05-23 17:35:09

标签: wcf

我正在开发一个wcf webservice。此服务使用我添加的第三方Web服务作为服务参考。 现在我想将这个proxyclient的一些属性发布给使用我的wcfservice的客户端,而不是定义自己的类并进行映射。

自动生成的代码作为分部类完成。

    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; }
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在我的服务上,XmlSerializer无法序列化PropertyChanged-event的自动生成的类原因。
如果我使用DataContractSerializer并使用[DataContract]装饰我自动生成的类,我无法通过[DataMember]继承来修饰属性,因为该属性不可继承。

所以我通过包装器属性扩展了这个部分类。

[DataContract]
public partial class Person 
{
    [DataMember]
    public string FirstNameWrapper 
    {
        get
        {
            return this.FirstName;
        }
        set
        { 
            this.FirstName = value; 
        }
    }
}