我正在开发一个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;
}
}
}