【问题标题】:Converting JSON string to DataTable将 JSON 字符串转换为 DataTable
【发布时间】:2015-06-16 05:39:23
【问题描述】:

我知道以前有人问过这种问题,但我似乎找不到任何有效的方法。

我正在尝试将 JSON 字符串转换为 DataTable,或者我可以在 C# 上使用的任何其他形式。

这是我收到的 JSON 文件的示例:

{ "DatabaseName" : {"Employees": [{"Full-Name":"John Smith","Address":["123 Main St", "Apt 202"],"City":"NYC"}]}}

我尝试了不同的方法,但要么得到一个空的 DataTable,要么得到许多不同的错误。

Object jObject = JsonConvert.DeserializeObject<JObject>(Response.Content);
DataTable dsResult = JsonConvert.DeserializeObject<DataTable>(jObject.ToString());

给我:

读取 DataTable 时出现意外的 JSON 令牌。预期 StartArray,得到 StartObject。路径'',第 1 行,位置 1。

任何帮助将不胜感激。

我也使用 JSON 2 C# 创建了一个类,并尝试使用

JsonConvert.DeserializeObject<Employees>(Response.Content);

但是,类不允许我创建变量 public string Full-Name,因为在创建变量时我不能使用 -。

有解决办法吗?

【问题讨论】:

  • Convert JSON to DataTable 的可能重复项
  • 您不应将其转换为 DataTable,而应将其转换为模型对象(普通类)。要弄清楚类结构应该是什么,我喜欢http://json2csharp.com/
  • 执行此操作时,我收到以下错误:无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[ProDataSet ]' 因为该类型需要一个 JSON 数组(例如 [1,2,3])才能正确反序列化。要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或将反序列化类型更改为正常的 .NET 类型
  • @user130622 你必须确保你反序列化到正确的类。

标签: c# asp.net json datatable json-deserialization


【解决方案1】:

使用Json 2 C# 创建你的类,就像@Plutonix 说的那样,查看here 的数据表。

【讨论】:

  • 我扩展了这个问题。 Json 2 C# 为类中创建的大多数公共变量提供了 __invalid 名称,因为它们包含破折号。这有什么诀窍吗?
  • 更正你的 json 查看@NeonBoxx 答案
  • 我从服务收到的json字符串是正确的,但是写问题的时候忘记放左括号。
  • 现在你有了你的类,你可以开始填充你的数据表了
【解决方案2】:

那个JSON无效,用这个来检查:http://jsonlint.com/

应该是这样的

{
    "DatabaseName": "Employees",
    "Rows": [
        {
            "FullName": "John Smith",
            "Address": [
                "123 Main St",
                "Apt 202"
            ],
            "City": "NYC"
        }
    ]
}

【讨论】:

  • 修复了此示例中的 JSON 字符串。在这里键入 json 字符串时,我错过了一个左括号。但该字符串是有效的 json。
  • 您可以将其反序列化为 Dictionary
  • 在从 json2csharp 转换的类上,您可以使用此属性装饰 fullname 属性:[Newtonsoft.Json.JsonProperty(PropertyName="Full-Name")] public string FullName { get; set; }
  • 这帮助了我!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 2012-10-06
  • 1970-01-01
相关资源
最近更新 更多