我的 WCF 界面如下所示:
[ServiceContract]
public interface IService
{
[OperationContract]
Foo<String>[] Test();
}
Foo<T>
类看起来像这样:
[DataContract(Name = "FooOf{0}")]
public class Foo<T>
{
public T Value { get; set; }
}
我发布了 WCF 服务并将服务引用添加到我的客户端代码,然后我像这样使用此方法:
var client = new ServiceClient(new BasicHttpBinding(), new EndpointAddress(@"http://myServer:port/Service.svc"));
FooOfString[] result = client.Test();
但是,我不能访问生成类的属性,例如,我不能这样做:
var value = result[0].Value; // cannot access property, does not compile
我可以通过删除 [DataContract(Name = "FooOf{0}")]
来做完全相同的事情我的一部分 Foo<T>
类,我可以访问属性,问题是生成的类的名称更改为 FooOfStringCHtiIp13
这看起来很难看,我正在尝试将其重命名为更具可读性的名称。但是,此操作现在有效:
FooOfStringCHtiIp13[] result = client.Test();
var value = result[0].Value; // can access, compiles
感觉有些东西没有序列化,我没有正确使用它。知道如何正确实现这一点吗?
解决了我的问题,问题出在我的Value
Foo<T>
的属性(property)类,我必须添加 DataMemberAttribute
到我的属性(property):
[DataContract(Name = "FooOf{0}")]
public class Foo<T>
{
[DataMemberAttribute(Name = "Value")]
public T Value { get; set; }
}
我是一名优秀的程序员,十分优秀!