我的WCF接口长这样:
[ServiceContract]
public interface IService
{
[OperationContract]
Foo<String>[] Test();
}
< p > < code > 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
如果我从我的Foo<T>
类中删除[DataContract(Name = "FooOf{0}")]
部分,我就能做到完全相同的事情,并且可以访问属性,但问题是生成的类的名称会改变为FooOfStringCHtiIp13
,这看起来很难看,我正在尝试将其重命名为更容易理解的名称。然而,现在这个操作是可行的:
FooOfStringCHtiIp13[] result = client.Test();
var value = result[0].Value; // can access, compiles
感觉好像有些东西没有被序列化,而且我可能没有正确使用它。有什么办法可以正确实现这个功能吗?
FooOf{0}
formats the generated class name toFooOfT
, whereT
is in my caseBar
- Peroxy