我有一个包含项目列表的类。当我序列化该类时,我希望项目索引值出现在 JSON 中。
我正在使用以下代码转换为 JSON:
var json = Newtonsoft.Json.JsonConvert.SerializeObject(imp);
Run Code Online (Sandbox Code Playgroud)
现在我得到的输出如下所示:
{
"userdata":{
"name":"name",
"type":"type",
"company_name":"company_name"
},
"f_item":null,
"o_item":null,
"attributes":[
{
"firstval":"0",
"name":"at 0",
"opposite_name":"opname 0"
},
{
"firstval":"1",
"name":"at 1",
"opposite_name":"opname 1"
},
{
"firstval":"2",
"name":"at 2",
"opposite_name":"opname 2"
},
{
"firstval":"3",
"name":"at 3",
"opposite_name":"opname 3"
},
{
"firstval":"4",
"name":"at 4",
"opposite_name":"opname 4"
}
],
"eos":null
}
Run Code Online (Sandbox Code Playgroud)
我需要这样的输出:
{
"userdata":{
"name":"name",
"type":"type",
"company_name":"company_name"
},
"f_item":null,
"o_item":null,
"attributes":{
"0": {
"firstval":"0",
"name":"at 0",
"opposite_name":"opname 0"
},
"1": {
"firstval":"1",
"name":"at 1",
"opposite_name":"opname 1"
},
"2": {
"firstval":"2",
"name":"at 2",
"opposite_name":"opname 2"
},
"3": {
"firstval":"3",
"name":"at 3",
"opposite_name":"opname 3"
},
"4": {
"firstval":"4",
"name":"at 4",
"opposite_name":"opname 4"
}
},
"eos":null
}
Run Code Online (Sandbox Code Playgroud)
如何配置 Json.Net 来输出索引值?
不要尝试配置 Json.Net 以非标准方式输出数据,而是尝试使用正确的数据结构。作为一个更简单的解决方案,使用字典来存储数组的内容。Json.Net 会将其解释为一个对象,并将使用每个键作为它的属性。
var originalArray = new [] {
new { Foo = "first", Bar = "abc" },
new { Foo = "second", Bar = "def" },
new { Foo = "third", Bar = "ghi" },
new { Foo = "fourth", Bar = "jkl" }
};
var data = originalArray
.Select((value, index) => new { value, index })
.ToDictionary(wrapper => wrapper.index, wrapper => wrapper.value);
var json = JsonConvert.SerializeObject(data);
Run Code Online (Sandbox Code Playgroud)
此示例代码将输出以下 JSON,这正是您想要的:
{
"0": {"Foo":"first", "Bar":"abc"},
"1": {"Foo":"second", "Bar":"def"},
"2": {"Foo":"third", "Bar":"ghi"},
"3": {"Foo":"fourth", "Bar":"jkl"}
}
Run Code Online (Sandbox Code Playgroud)