C# WCF上泛型的getter和setter
如果我在WCF服务中有一个泛型类C# WCF上泛型的getter和setter,c#,wcf,getter-setter,C#,Wcf,Getter Setter,如果我在WCF服务中有一个泛型类 [DataContract(Name=“TestGenericOf{0}”)] 公共类TestGeneric { [数据成员] 公共字符串TestProperty { 获取{return _testProperty.ToUpper();} 设置{u testProperty=value;} } 私有字符串_testProperty; } 客户端(本例中为MVC)通过服务引用使用服务。我想在服务和客户机之间共享getter和setter逻辑;但是,由于类是泛型的
[DataContract(Name=“TestGenericOf{0}”)]
公共类TestGeneric
{
[数据成员]
公共字符串TestProperty
{
获取{return _testProperty.ToUpper();}
设置{u testProperty=value;}
}
私有字符串_testProperty;
}
客户端(本例中为MVC)通过服务引用使用服务。我想在服务和客户机之间共享getter和setter逻辑;但是,由于类是泛型的,因此在客户端上创建的类与在服务上创建的类不同
公共部分类TestGenericOfstring:object,System.Runtime.Serialization.IEExtensibleDataObject,System.ComponentModel.INotifyPropertyChanged{
[System.Runtime.Serialization.OptionalFieldAttribute()]
私有字符串TestPropertyField;
[System.Runtime.Serialization.DataMemberAttribute()]
公共字符串TestProperty{
得到{
返回this.TestPropertyField;
}
设置{
if((object.ReferenceEquals(this.TestPropertyField,value)!=true)){
this.TestPropertyField=值;
此.RaisePropertyChanged(“TestProperty”);
}
}
}
}
在服务和客户机上实现相同的getter、setter逻辑的最佳方法是什么?在生成客户机代码时,您应该能够通过在svcutil中指定程序集来共享该程序集。通用方面应该无关紧要 检查此链接以获取示例: 更新:
您可能还希望查看KnownTypes属性,以告诉序列化程序可以使用哪些泛型类型 它只是一个数据契约,指定了一个契约,而不是明确的行为。对ToUpper()的调用不会出现在客户端(除非客户端有您的类)。不过,我相信对
ToUpper
的调用仍然会发生。当客户端调用web服务时,WS返回的数据将在代码中使用getter。除非调用WS并获取此对象,然后重复设置并获取该属性,否则不应该有任何问题。返回的初始对象应调用ToUpper
。@RyanP非常正确,但我正在尝试在客户端中设置属性。我想,在客户端复制逻辑的最干净的方法是什么?正如Simon所说,客户端需要类。如果这些类是要共享的,而且看起来它们是共享的,那么您应该将这些类放在一个公共程序集中,并让客户端和服务器都引用它们。明白了。我遇到的问题是,由于该类是泛型的,当WCF服务序列化该类时,它会为使用的每个泛型创建类(TestGenericOfString),因此即使这些类是共享的,客户端也不会使用泛型类。很抱歉,我会更新我的问题。