【问题标题】:C# Json deserialization errorC# Json 反序列化错误
【发布时间】:2015-12-28 05:39:50
【问题描述】:

我想将 json 字符串转换为 C# 数据表,并且我的 json 字符串包含另一个 json 字符串。 我不想转换内部 json 字符串(仅将其保留为字符串)。这是我的代码

 string js = "[{\"FirstName\":\"first\",\"LastName\":\"second\",\"jsonStr\":\"[{\"abc\":\"a\",\"xyz\":\"x\"}]\"}]";
            DataTable dt = (DataTable)JsonConvert.DeserializeObject(js, (typeof(DataTable)));
            gv.DataSource = dt;
            gv.DataBind();

但我收到一个错误

解析一个值后,遇到了一个意外字符:小路 '[0].jsonStr',第 1 行,位置 56。

【问题讨论】:

  • 注意你的json是否有效?我只是将它粘贴在一个在线解析中,它显示你的 json 错误。其次,我不确定 Json Converter 是否知道如何使用 Json 创建数据库。您可能需要将 json 解析为一个对象,然后从对象通过定义列和行来创建您的数据表。
  • 在字符串\r\n中加入一些新行,行数比字符数更容易
  • 请接受答案。它对其他人也有用。

标签: c# json datatable deserialization multi-level


【解决方案1】:

您的 JSON 无效。转义后变成如下字符串:

[
    {
        "FirstName" : "first",
        "LastName" : "second",
        "jsonStr" : "[{" abc ":" a "," xyz ":" x "}]"
    }
]

堆栈溢出语法突出显示表明您的 JSON 无效。
您还可以检查 JSON 有效性here。

为了使其有效,您在jsonStr 中的引号应该再次转义:

string js = "[{\"FirstName\":\"first\",\"LastName\":\"second\",\"jsonStr\":\"[{\\\"abc\\\":\\\"a\\\",\\\"xyz\\\":\\\"x\\\"}]\"}]";

这个 C# 字符串现在包含以下有效的 JSON:

[
    {
        "FirstName": "first",
        "LastName": "second",
        "jsonStr": "[{\"abc\":\"a\",\"xyz\":\"x\"}]"
    }
]

【讨论】:

  • 谢谢 :) 我没注意到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多