将数据表转换为json

时间:2018-01-12 06:52:20

标签: c# arrays json

我在c#中有一个包含以下内容的数据表:

firstName lastName email                   password
Alpha     Tango    AlphaTango@domain.com   123
Charle    Tango    CharlieTango@domain.com 456

我需要使用以下格式将此数据表转换为json。

{
    "columns": [ 
      "firstName", 
      "lastName", 
      "email", 
      "password",
    ],
    "rows": [
      [
        "Alpha",
        "Tango",
        "AlphaTango@domain.com",
        "123"
      ],
      [
        "Charle",
        "Tango",
        "CharlieTango@domain.com",
        "456"
      ]
    ]
}

我可以通过JsonConvert.SerializeObject(dt1.AsEnumerable().Select(r => r.ItemArray))将行转换为数组的json数组 但我无法得到整个json(有行和列)。任何指针都将受到高度赞赏。

1 个答案:

答案 0 :(得分:3)

这样的事情应该有效:

JsonConvert.SerializeObject(new {
   columns = dt1.Columns.Cast<DataColumn>().Select(x => x.ColumnName),
   rows = dt1.AsEnumerable().Select(r => r.ItemArray),
});

我做了一个简单的小提琴:https://dotnetfiddle.net/T5Gs8l

结果似乎正是您所期望的:

{
  "columns": [
    "firstName",
    "lastName",
    "email",
    "password"
  ],
  "rows": [
    [
      "Alpha",
      "Tango",
      "AlphaTango@domain.com",
      "123"
    ],
    [
      "Charlie",
      "Tango",
      "CharlieTango@domain.com",
      "456"
    ]
  ]
}

请注意,您丢失了类型信息,因此如果您的列可能具有不同的数据类型,则将对象反序列化回相同的数据表可能会很棘手(您可能需要从值中推断列类型)。

如果要对其进行反序列化,我可能会在列上存储更多信息。