【问题标题】:Deserialize JSON object to Datatable将 JSON 对象反序列化为 Datatable
【发布时间】:2015-03-17 08:49:12
【问题描述】:

IDE:Visual Studio 2010 平台:C#

我正在尝试将由两个不同表中的数据组成的 JSON 对象转换为数据表。这是我写的代码:

JavaScriptSerializer objJSSWW = new JavaScriptSerializer();
var lastBattingDetailsWW = JsonConvert.DeserializeObject<EmpDetails>(JsonBattingWW);


public class EmpDetails
{
    public List<List<object>> Table { get; set; }
    public List<List<object>> Table1 { get; set; }
}

我希望将这两个表存储在 DataTable 中。有什么建议吗?

【问题讨论】:

  • 为什么我投了这么多票?
  • 你尝试了什么?你得到了什么错误?
  • 我试过这个 DataTable dtValue = (DataTable)JsonConvert.DeserializeObject(JsonBattingWW, (typeof(DataTable)));收到此错误:完成反序列化对象后在 JSON 字符串中找到附加文本。
  • 再一次,再次投反对票,这太不可思议了......
  • 你被否决了,因为你没有搜索。看到这个链接stackoverflow.com/questions/11981282/convert-json-to-datatable/…

标签: c# .net json c#-4.0


【解决方案1】:

试图给你一些(至少是伪的)代码。 假设您的“列表”长度固定。对于此示例,我假设您的 List 包含 3 个元素。

DataTable dataTable1 = new DataTable();
dataTable1.Columns.Add("col1");
dataTable1.Columns.Add("col2");
dataTable1.Columns.Add("col3");
foreach (var row in EmpDetails.Table)
{
    dataTable1.Rows.Add(row.ToArray());
}

DataTable dataTable2 = new DataTable();
dataTable2.Columns.Add("col1");
dataTable2.Columns.Add("col2");
dataTable2.Columns.Add("col3");
foreach (var row in EmpDetails.Table1)
{
    dataTable2.Rows.Add(row.ToArray());
}

如果您有 2 个具有相同列的表,您可以简单地合并它们:

dataTable1.Merge(dataTable2);

【讨论】:

  • 我很欣赏这个答案,但如果有数十万条记录,这将花费很多时间。我正在寻找一种方法来一次性反序列化它,而不是遍历所有记录...
  • 反序列化也确实循环通过它......不知何故。
猜你喜欢
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
相关资源
最近更新 更多