序列化对象与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)
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。