C# 使用c反序列化包含单引号的json字符串#

C# 使用c反序列化包含单引号的json字符串#,c#,json,json.net,deserialization,C#,Json,Json.net,Deserialization,我有一个json字符串,其中包含一个字符串文本作为对象-PostData之一的值 string json = "{\"PostData\": '{\"LastName\": \"O Corner\",\"FirstName\":\"Mark\",\"Address\":\"123 James St\"}'}"; 我正在尝试使用以下方法反

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

string json = "{\"PostData\": '{\"LastName\": \"O Corner\",\"FirstName\":\"Mark\",\"Address\":\"123 James St\"}'}";
我正在尝试使用以下方法反序列化json:

var obj = JsonConvert.DeserializeObject<dynamic>(json);
但是,一旦我得到包含单引号的数据,比如:

string json = "{\"PostData\": '{\"LastName\": \"O' Corner\",\"FirstName\":\"Mark\",\"Address\":\"123 James St\"}'}";
我在反序列化时遇到异常。我怎样才能避开单一的引用

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

但是,我发现Newtonsoft不包含
StringEscapeHandling
的定义

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

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

现在不幸的是,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'}}"

我认为最好的选择是首先仔细地序列化对象。使用哪个Newtonsoft.Json版本
StringEscapeHandling.EscapeHtml
存在于最新的
8.0.3
版本中,工作正常。
string json = "{'PostData': {'LastName': 'O\u0027 Corner','FirstName':'Mark','Address':'123 James St'}}"
string json = "{'PostData': {'LastName': 'O\\u0027 Corner','FirstName':'Mark','Address':'123 James St'}}"