wcf – 在数据合同中未设置数据成员字段时如何返回null - 代码日志

wcf – 在数据合同中未设置数据成员字段时如何返回null

我有一个奇怪的问题,我的WCF服务返回JSON格式的数据。
我想根据客户发出的请求返回有关“客户”的信息。

客户可以请求关于他们所需要的客户的哪些信息领域,服务需要仅发送有关客户的信息。

例如:如果客户端要求客户列表,并说他们想要名字,姓氏,城市
然后服务器应发送一个json响应,每个字段名称和相应的值

就像是…

[
  {"firstname":"john","lastname":"Goodman","city" :"NY"},
  {"firstname":"brad","lastname":"newman","city" :"LA"}
]

如果客户要求具有ID和城市字段的客户列表,那么响应应该如此

[
  {"id" :"1234","city" :"NY"},
  {"id":"1235","city" :"LA"}
]

我的初始设计是实施一个“客户”类,然后每个可能的“领域”
作为这个类的领域。然后在我的服务方法中,我得到了客户端指定的字段列表,并且只有这些属性被设置才实现客户对象。

我的运营合同看起来像这样

[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "Customers?fields={value}")]
List<Customer> GetCustomers(string value);

但问题是当我用“DataContract”将每个字段设为“DataMember”时,如果没有设置某些属性,则在发送给客户端时仍然将它们反序列化为NULL。我不想要这样做。

此外,客户名单很长,所以班级变得非常大。我宁愿将这些字段存储为我的服务中的枚举集合,而不是类的字段。

然后我想到让我的操作返回一个IDictionary< string,object>然后将每个字段和值迭代地添加到此集合。这没有工作,因为当字典被序列化时,它显示{“Key:dfas”,“Value:34”}等等,而不是我想要的

所以我有点卡住了解决这个问题的最好办法是什么?

我可以标记我的[DataContract]这样的方式,如果[DataMember]属性没有设置,那么它们不应该被序列化并发送到客户端?

您可以标记每个数据成员,如果它是null,则不会被序列化。主要部分是:EmitDefaultValue = false

[DataContract]
public class Person
{
    [DataMember(EmitDefaultValue = false)]
    public string id { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public string firstname { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public string lastname { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public string city { get; set; }
}
http://stackoverflow.com/questions/5685045/how-to-not-return-null-when-a-data-member-field-is-not-set-in-the-data-contract

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:wcf – 在数据合同中未设置数据成员字段时如何返回null