【问题标题】:Deserialize json string that contains singlequote using c#使用c#反序列化包含单引号的json字符串
【发布时间】:2016-04-22 18:39:06
【问题描述】:

我有一个 json 字符串,其中包含一个字符串文字作为对象之一的值 - PostData

string json = "{\"PostData\": '{\"LastName\": \"O Corner\",\"FirstName\":\"Mark\",\"Address\":\"123 James St\"}'}";

我正在尝试使用以下方法反序列化 json:

var obj = JsonConvert.DeserializeObject<dynamic>(json);

然后,我可以使用 PostData 的 json 字符串值,例如:

obj["PostData"].ToString()

但是,一旦我得到带有单引号的数据,例如:

string json = "{\"PostData\": '{\"LastName\": \"O' Corner\",\"FirstName\":\"Mark\",\"Address\":\"123 James St\"}'}";

我在反序列化时遇到异常。如何转义单引号?

我已经检查过类似的问题,但没有得到任何工作。我还尝试了他的thread 中提到的解决方案之一:

JsonSerializerSettings settings = new JsonSerializerSettings
{
    StringEscapeHandling =  StringEscapeHandling.EscapeHtml
};

JsonConvert.SerializeObject(obj, settings);

但是,我得到 Newtonsoft 不包含 StringEscapeHandling 的定义。

另外,尝试用\ 转义字符串中的单引号: '{\"LastName\": \"O\' Corner\",\"FirstName\":\"Mark\",\"Address\":\"123 James St\"}' 也不起作用。

【问题讨论】:

  • 我认为最好的选择是首先仔细序列化您的对象。使用的是哪个 Newtonsoft.Json 版本? StringEscapeHandling.EscapeHtml 存在于最新的 8.0.3 版本中并且工作正常。

标签: c# json json.net deserialization


【解决方案1】:

首先,值得注意的是 JSON syntax 在您使用双引号的地方使用单引号。以下是正确语法的指南:

不幸的是,现在 JSON 不允许使用这样的单引号,但我们可以使用 unicode \u0027 作为撇号并使用 JSON 的序列化程序设置,就像您已经完成的那样。所以你的原始字符串:

string json = "{\"PostData\": '{\"LastName\": \"O' Corner\",\"FirstName\":\"Mark\",\"Address\":\"123 James St\"}'}";

变成:

string json = "{'PostData': {'LastName': 'O\u0027 Corner','FirstName':'Mark','Address':'123 James St'}}"

这是假设您正在解析字符串文字,否则您需要转义 unicode 才能给出:

string json = "{'PostData': {'LastName': 'O\\u0027 Corner','FirstName':'Mark','Address':'123 James St'}}"

【讨论】:

  • 转义 unicode 对我们有用,即 \u0027\\u0027
猜你喜欢
  • 2012-03-23
  • 2012-05-15
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
相关资源
最近更新 更多