将匿名对象转换为JSON对象

时间:2018-04-13 10:18:41

标签: c# json.net

很抱歉,如果已经提出这个问题,假设我有一个匿名的对象列表,如下所示:

   Collection = new List<object>() {
    new {
        FirstSetting    =  new
        {
            FirstKEy = "Property vs Inspections",
            color = "#FF6384",
            fontStyle = "Arial",
            sidePadding = 10,
        }
    },
    new {
        AnotherSettings =  new
        {
            text = "another text",
            color = "#FF6384",
            fontStyle = "Arial",
            sidePadding = 10,
        }
    }
};

并希望使用

转换为JSON字符串

JsonConvert.SerializeObject(Collection, JsonSerializerSettings);

我得到了这个结果。

[{
    "FirstSetting": {
        "FirstKey": "Property vs Inspections",
        "color": "#FF6384",
        "fontStyle": "Arial",
        "sidePadding": 10
    }
}, {
    "anotherSettings": {
        "text": "another text",
        "color": "#FF6384",
        "fontStyle": "Arial",
        "sidePadding": 10
    }
}]

但我不希望有阵列。我希望每个设置都是这样的对象。

{
    "FirstSetting": {
        "FirstKey": "Property vs Inspections",
        "color": "#FF6384",
        "fontStyle": "Arial",
        "sidePadding": 10
    },
    "anotherSettings": {
        "text": "another text",
        "color": "#FF6384",
        "fontStyle": "Arial",
        "sidePadding": 10
    }
}

有人可以解决一些问题吗?

3 个答案:

答案 0 :(得分:1)

为此你需要以这种方式构造另一个匿名对象以获得所需的json。

如果序列化集合,那么它显然会在json中转换为数组:

var obj = new
    {
        Result = new
        {
            FirstSetting = new
            {
                FirstKEy = "Property vs Inspections", color = "#FF6384", fontStyle = "Arial", sidePadding = 10
            }, 
            AnotherSettings = new
            {
                text = "another text", color = "#FF6384", fontStyle = "Arial", sidePadding = 10 
            }
        }
    };

生成的json将是:

{
   "Result":{
      "FirstSetting":{
         "FirstKey":"Property vs Inspections",
         "color":"#FF6384",
         "fontStyle":"Arial",
         "sidePadding":10
      },
      "anotherSettings":{
         "text":"another text",
         "color":"#FF6384",
         "fontStyle":"Arial",
         "sidePadding":10
      }
   }
}

答案 1 :(得分:1)

跟进Ehsan Sajjad的回答。把它放在一个对象中会让我觉得它更具可读性。

Object mySettings = new {
    FirstSetting = new {
            FirstKEy = "Property vs Inspections",
            color = "#FF6384",
            fontStyle = "Arial",
            sidePadding = 10,
    },
    AnotherSettings = new {
        text = "another text",
        color = "#FF6384",
        fontStyle = "Arial",
        sidePadding = 10,
    }
};

以上可能会给你想要的结果。

答案 2 :(得分:1)

不是那就更好了,但如果有人发现它有用,你也可以使用字典。它仍然是干净的代码,它从列表中删除第一个对象'Result'。我发现它更清洁,但这是偏好。

var collection = new Dictionary<object, object>()
{
    ["FirstSetting"] = new
    {
        FirstKEy = "Property vs Inspections",
        color = "#FF6384",
        fontStyle = "Arial",
        sidePadding = 10,
    },
    ["AnotherSettings"] = new
    {
        text = "another text",
        color = "#FF6384",
        fontStyle = "Arial",
        sidePadding = 10,
    }
};

var jsonString = JsonConvert.SerializeObject(collection);

输出到:

{
    "FirstSetting": 
    { 
        "FirstKEy":"Property vs Inspections",
        "color":"#FF6384",
        "fontStyle":"Arial",
        "sidePadding":10
    },
    "AnotherSettings":
    {
        "text":"another text",
        "color":"#FF6384",
        "fontStyle":"Arial",
        "sidePadding":10
    }
}