使用c#反序列化包含singlequote的json字符串

时间:2016-04-22 18:39:06

标签: c# json json.net deserialization

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

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

我正在尝试使用以下命令反序列化json:

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

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

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);

但是,我得知牛顿软件不包含StringEscapeHandling的定义。

另外,尝试使用\在字符串中转义单引号: '{\"LastName\": \"O\' Corner\",\"FirstName\":\"Mark\",\"Address\":\"123 James St\"}'也没用。{/ p>

1 个答案:

答案 0 :(得分:2)

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

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'}}"