序列化对象与json.net嵌套字典

本文关键字:嵌套 字典 net json 对象 序列化 | 更新日期: 2023-09-27 18:12:17

我有点迷失了序列化JSON对象,我试图将Item类序列化为JSON

class Item
{
    public Dictionary<string, object> components = new Dictionary<string, object> { };
    public string mixins { get; set; }
    public string type { get; set; }
}
class Components
{
    public Dictionary<string, object> unit_info = new Dictionary<string, object> { };
    public Dictionary<object, object> generateUnitInfo()
    {
        unit_info.Add("bla", "blubb");
        unit_info.Add("blubb", "bla");
        return unit_info;
    }
}

我的JSON应该是这样的

{
   "components": {
      "unit_info" : {
         "bla": "blubb",
         "blubb": "bla",
      },
   }
}

任何提示都将有所帮助,提前感谢

编辑:这是我到目前为止的代码

Component c = new Component();
Item item = new Item();
item.type = CBItemType.SelectedItem.ToString();
item.mixins = "test mixins";
item.components.Add(c.unit_info, c.generateUnitInfo());
string json = JsonConvert.SerializeObject(item, Formatting.Indented);

这就是我得到的

{
  "mixins": "test mixins",
  "type": "entity",
  "components": {
    "(Collection)": {
      "bla": "blubb",
      "blubb": "bla"
    }
  },
  "entity_data": {}
}

generateUnitInfo方法为unit_info添加了2 k/v对,我想要的不是(Collection) unit_info

序列化对象与json.net嵌套字典

可以使用匿名对象(Json.Net)

var obj = new { components = new { unit_info = new { bla="blubb", blubb="bla" } } };
var json = JsonConvert.SerializeObject(obj);
内置的JavaScriptSerializer也会给出相同的结果
var json = new JavaScriptSerializer().Serialize(obj);

PS:如果你必须使用字典,你也可以使用它

var obj = new Dictionary<string, object>()
{
    {
        "components", new Dictionary<string,object>()
        {
            {
                "unit_info" , new Dictionary<string,object>()
                {
                    { "bla", "blubb" }, {"blubb", "bla" }
                }
            }
        }
    }
};

两个序列化器都将返回您期望的json。