我想有下面的类定义:C#类来生成JSON收集
[Serializable]
[CollectionDataContract(Name = "Crowd")]
public class Crowd : List<Person>
{
}
[DataContract(Name = "Person")]
public class Person
{
public string Name { get; set; }
public string Age { get; set; }
public string Gender { get; set; }
}
,并获得以下JSON:
{
[
{"Name" : "Larry", "Age" : "42", "Gender" : "M"},
{"Name" : "Steve", "Age" : "32", "Gender" : "M"},
{"Name" : "Nancy", "Age" : "22", "Gender" : "F"},
]
}
但我想最终得到这是什么:
{
"Crowd" :
[
{"Name" : "Larry", "Age" : "42", "Gender" : "M"},
{"Name" : "Steve", "Age" : "32", "Gender" : "M"},
{"Name" : "Nancy", "Age" : "22", "Gender" : "F"},
]
}
看来,DataContractJsonSerializer
类忽略[CollectionDataContract(Name = "Crowd")]
属性。 XML序列化按预期工作。
这将工作,但我不想这样定义我的课(去掉类属性显示结构):
public class Root
{
public List<Person> Crowd { get; set;}
}
public class Person
{
public string Name { get; set; }
public string Age { get; set; }
public string Gender { get; set; }
}
任何理由,为什么.NET DataContractJsonSerializer
忽略CollectionDataContract
属性。任何想法如何我可以强制这个来产生我想要的? XML序列化器工作正常,但我们需要使用JSON。
编辑:所以给出的输入,因此,到目前为止,看来这是我应该为我的JSON(这似乎很有道理):
{
"Crowd" :{
"Person" :
[
{"Name" : "Larry", "Age" : "42", "Gender" : "M"},
{"Name" : "Steve", "Age" : "32", "Gender" : "M"},
{"Name" : "Nancy", "Age" : "22", "Gender" : "F"},
]
}
}
感谢RKam。我的研究也指出了这个方向。奇怪的是,JSON不需要根元素,并给出我当前的输出,似乎该集合没有类型属性,只是一堆没有“根”名称的重复列将它们联系在一起。如果有人想要获取该集合,则可能包含任何数量的内容,如“罪犯”,“教师”,“经理”等。 再次感谢您对此主题的意见。 – 2014-10-03 23:31:13
当您将JSON作为表示Javascript对象的方式时,它会变得语义化。你在JSON中表示的是一个Array对象,用另一个属性来表示孩子是次优的。 Javascript本身不支持对象方向,因此一切都是对象。把它想象成序列化一个.NET动态对象。如果你想序列化类型,你应该包含一个显示类型的属性。例子就是像BreezeJS这样的框架,它可以在将.NET数据序列化为Javascript时执行此操作。 – KRam 2014-10-05 02:49:25