我的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>
部分,我可以执行完全相同的操作,我可以访问属性,问题是生成的类的名称,该类更改为{{ 1}}看起来很难看,我试图将它重命名为更具可读性的东西。但是,此操作现在可以正常运行:
FooOfStringCHtiIp13
感觉有些东西没有被序列化,我没有正确使用它。知道如何正确实现这一目标吗?
答案 0 :(得分:0)
解决了我的问题,问题发生在Value
类的Foo<T>
属性中,我必须将DataMemberAttribute
添加到我的媒体资源中:
[DataContract(Name = "FooOf{0}")]
public class Foo<T>
{
[DataMemberAttribute(Name = "Value")]
public T Value { get; set; }
}