如何在没有数组的情况下将c#对象数组序列化为json对象

时间:2015-10-01 00:55:50

标签: serialization json.net

我想使用JsonConvert.Serialize将c#数组类对象序列化为json非数组对象。

公开列表< 员工>雇员;

输出:

"{\"employees\":
{\"name\":\"Alex\",\"number\":\"25860340\"},
{\"name\":\"Tom\",\"number\":\"94085345\"}
}" 

1 个答案:

答案 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"
    }
  }
}