【问题标题】:Renaming WCF generic class with DataContract Name attribute使用 DataContract Name 属性重命名 WCF 泛型类
【发布时间】:2017-02-16 11:53:53
【问题描述】:

我的 WCF 界面如下所示:

[ServiceContract]
public interface IService
{
   [OperationContract]
    Foo<String>[] Test();
}

Foo&lt;T&gt; 类如下所示:

[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&lt;T&gt; 类的[DataContract(Name = "FooOf{0}")] 部分来做同样的事情,我可以访问属性,问题是生成的类的名称更改为FooOfStringCHtiIp13,看起来丑陋,我正在尝试将其重命名为更具可读性的名称。但是,此操作现在有效:

FooOfStringCHtiIp13[] result = client.Test();
var value = result[0].Value; // can access, compiles

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

【问题讨论】:

  • FooOf{0} 将生成的类名格式化为FooOfT,在我的例子中TBar
  • 尝试将 DataMember 属性添加到 Value 属性?
  • 我刚刚在您写评论时尝试过。这就是问题所在

标签: c# wcf serialization


【解决方案1】:

解决了我的问题,问题出在我的Foo&lt;T&gt; 类的Value 属性中,我必须将DataMemberAttribute 添加到我的属性中:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-04
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多