我有一个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>
答案 0 :(得分:2)
首先,值得注意的是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'}}"