我有一个包含项目列表的类。当我序列化该类时,我希望项目索引值出现在 JSON 中。
我正在使用以下代码转换为 JSON:
var json = Newtonsoft.Json.JsonConvert.SerializeObject(imp);
现在我得到的输出如下所示:
{
    "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
}
我需要这样的输出:
{
    "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
}
如何配置 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);
此示例代码将输出以下 JSON,这正是您想要的:
{
    "0": {"Foo":"first",  "Bar":"abc"},
    "1": {"Foo":"second", "Bar":"def"},
    "2": {"Foo":"third",  "Bar":"ghi"},
    "3": {"Foo":"fourth", "Bar":"jkl"}
}