我想使用JsonConvert.Serialize将c#数组类对象序列化为json非数组对象。
公开列表< 员工>雇员;
输出:
"{\"employees\":
{\"name\":\"Alex\",\"number\":\"25860340\"},
{\"name\":\"Tom\",\"number\":\"94085345\"}
}"
答案 0 :(得分:1)
您在问题中要求的格式不是有效的JSON,因为除非它们是数组的一部分,否则不允许对象直接相互跟随(请参阅JSON.org)。但是,您可以将员工列表转换为字典并将其序列化,只要您有合适的密钥即可使用。一种想法是使用员工编号作为密钥,例如:
var employees = new List<Employee>
{
new Employee { name = "Alex", number = "25860340" },
new Employee { name = "Tom", number = "94085345" }
};
var obj = new
{
employees = employees.ToDictionary(e => e.number)
};
string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
Console.WriteLine(json);
这会给你这个输出,它接近你想要的:
{
"employees": {
"25860340": {
"name": "Alex",
"number": "25860340"
},
"94085345": {
"name": "Tom",
"number": "94085345"
}
}
}
如果员工编号实际上并不唯一,那么您可以将列表中每个员工的职位用作以下关键字:
int i = 0;
var obj = new
{
employees = employees.ToDictionary(e => i++)
};
这将为您提供以下输出:
{
"employees": {
"0": {
"name": "Alex",
"number": "25860340"
},
"1": {
"name": "Tom",
"number": "94085345"
}
}
}