使用DataContract Name属性

时间:2017-02-16 11:53:54

标签: c# wcf serialization

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

感觉有些东西没有被序列化,我没有正确使用它。知道如何正确实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

解决了我的问题,问题发生在Value类的Foo<T>属性中,我必须将DataMemberAttribute添加到我的媒体资源中:

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