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



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

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

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

我尝试通过使用元数据类型属性并将 [DataMember]-属性添加到属性来覆盖这些属性。但这接缝仅适用于 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 无法序列化自动生成的类导致 PropertyChanged-event。
如果我使用 DataContractSerializer 并使用 [DataContract] 修饰自动生成的类,则无法通过使用 [DataMember] 继承来修饰属性,因为属性不可继承。

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

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

最新更新