我正在开发一个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来完成它,还是我必须手动构造字符串?
答案 0 :(得分:0)
无法调整默认数据合同序列化,我看到以下解决方案
Result
和Person
创建JsonConverter。 WCF的服务合同未更改Stream GetPersons()
上更新WCF的服务合同,并为List<Person> Persons
创建自定义JsonConverter。这种方式比1st更简单,因为序列化过程是相同的