具有特定格式的WCF序列化

时间:2013-12-29 23:22:26

标签: c# json wcf serialization

我正在开发一个WCF Web服务项目。

我有一份年龄段的人员名单,我需要以JSON身份返回。为此,我正在做以下事情:

这是我的服务功能:

[OperationContract]
[WebInvoke(
    Method = "GET",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "GetPersons")]
Result GetPersons();

我有Person班级:

[DataContract]
public class Person
{
    [DataMember(Name = "ID")]
    public int ID { get; set; }

    [DataMember(Name = "Name")]
    public string Name { get; set; }

    [DataMember(Name = "Age")]
    public int Age{ get; set; }
}

课程Result

[DataContract]
public class Result
{
    [DataMember(Name = "Persons")]
    public List<Person> Persons{ get; set; }
}

返回Result课程时,我收到了这个JSON表格:

{"Persons":[{"Name" : "Tom", "Age" : 5 } , {"Name" : "Kate", "Age" : 8 }]}

我有没有办法建立这种结构:

{"Persons":{"Tom" : 5, "Kate" : 8 }}

基本上我希望人名是这个时代的关键。

我尝试使用Dictionary<string, int>代替Person课程,但我得到以下内容:

{"Persons":[{"Key" : "Tom", "Value" : 5 } , {"Key" : "Kate", "Value" : 8 }]}

如何获得所需的JSON表单?有没有办法通过使用内置序列化的WCF来完成它,还是我必须手动构造字符串?

1 个答案:

答案 0 :(得分:0)

无法调整默认数据合同序列化,我看到以下解决方案

  1. 更改Newtonsoft.Json上的数据合同序列化,此处为explanation 在Newtonsoft.Json上创建自定义JsonConverter。请注意,您必须为ResultPerson创建JsonConverter。 WCF的服务合同未更改
  2. Stream GetPersons()上更新WCF的服务合同,并为List<Person> Persons创建自定义JsonConverter。这种方式比1st更简单,因为序列化过程是相同的