使用DataContract Name属性重命名WCF泛型类

3

我的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

感觉好像有些东西没有被序列化,而且我可能没有正确使用它。有什么办法可以正确实现这个功能吗?


1
FooOf{0} formats the generated class name to FooOfT, where T is in my case Bar - Peroxy
1
尝试在Value属性上添加一个DataMember属性? - Joe
我刚刚在你发表评论的时候尝试了一下,那就是问题所在。 - Peroxy
1个回答

1

问题已解决,问题出在我 Foo<T> 类的 Value 属性上,我需要在该属性上添加 DataMemberAttribute

[DataContract(Name = "FooOf{0}")]
public class Foo<T>
{
    [DataMemberAttribute(Name = "Value")]
    public T Value { get; set; }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接