【发布时间】:2017-03-17 04:15:09
【问题描述】:
我正在尝试序列化 Poll 类,它看起来像这样:
class Poll
{
(...) //methods
public AnswersCollection answers { get; set; }
public TagsCollection tags { get; set; }
public string question { get; set; }
}
如您所见,我有“TagsCollection”和“AnswersCollection”,它们看起来很相似,所以我只展示其中一个。
class AnswersCollection
{
(...) //methods
public List<Answer> answers { get; set; }
}
最后,Answer 课。
class Answer
{
(...) //methods
public string name { get; set; }
public uint voteQuantity { get; set; }
}
所有类都有默认的公共构造函数(不带参数),因此 JSON.NET 没有任何序列化问题。
问题在于 AnswersCollection(即封装),正因为如此,JSON 输出看起来像这样:
{
"answers":{
"answers":[
{
"name":"Foo",
"voteQuantity":45
},
{
"name":"Bar",
"voteQuantity":30
}
]
},
"tags":{
"tags":[
{
"name":"FooTag",
"id":5
},
{
"name":"BarTag",
"id":4
}
]
},
"question":"Question?"
}
如您所见,问题出在“answers”之类的结构上:{ "answers": [(...)] }
是否可以选择将其序列化为“answers”之类的结构:[(...)] 没有第二个“answers”标签? 我尝试使用“isReference”之类的属性,但没有成功。
【问题讨论】:
-
你看过 Datacontracts 吗? stackoverflow.com/questions/16943176/…
-
第一个
answers是 Poll 类中的 var 名称——第二个answers是 AnswersCollection 类中的 var 名称——你得到它们是因为你正在序列化 Poll 类—— - 没有设置可以改变这一点的标志......由于你的类的结构,就是这样 -
@Bret 我知道,我想避免只包含变量或类的名称,而不忽略它的内容,因为所有 Collection 类都封装了一些方法。
标签: c# json serialization json.net