【问题标题】:JSON string failing in JSON.parse but passes JsonConvert.DeserializeObjectJSON 字符串在 JSON.parse 中失败,但通过了 JsonConvert.DeserializeObject
【发布时间】:2014-06-18 09:22:17
【问题描述】:

我的 C# 类是

public class Man
{
    public string name {get; set;}
}

要反序列化的字符串是这样的

var content = "[{name: \"john\"}]"

现在在保存到 db 之前,我正在检查是否可以将字符串反序列化为 C# 对象然后存储它。此项检查通过

JsonConvert.DeserializeObject<List<Man>>(content)

所以我将此字符串保存在 db 中,但是当我对 javascript 中保存的字符串执行 JSON.parse 时,它​​会因错误而崩溃

JSON.parse("[{name: \"john\"}]")
SyntaxError: Unexpected token n

现在我明白,通过在键(“名称”)周围加上引号可以解决这个问题。这是适用于 JSON.parse 和 JsonConvert.DeserializeObject 的正确字符串

var content = "[{\"name\": \"john\"}]

问题是我在 db 中有很多这样的格式错误的字符串,它们只在 JSON.parse 上崩溃。转换此类字符串以便 JSON.parse 工作的最佳方法是什么?比 string.replace 更好的东西 请注意,与给出的示例相比,实际的字符串相当大且复杂。

【问题讨论】:

  • 先反序列化,然后再用 json.net 序列化

标签: c# javascript json json.net


【解决方案1】:

您可以使用using Newtonsoft.Json; 来反序列化对象对象,甚至是var content = "[{name: \"john\"}]" 格式的json 数据。

value 包含如下数据:{StyleId:"1710","SelectedItemToColorMap":{1391:"583",21531:"7733"}}

 var jsondata = JsonConvert.DeserializeObject(value);

DeserializeObject 之后 jsondata 的样子

{
  "StyleId": "1710",
  "SelectedItemToColorMap": {
    "1391": "583",
    "21531": "7733"
  }
}

【讨论】:

  • 你可以 DeserializeObject 然后在 JSON.parse() 上使用它;
猜你喜欢
  • 2020-04-23
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
相关资源
最近更新 更多