2016-04-22 3 views
0

У меня есть строка json, которая содержит строковый литерал как значение одного из объектов - PostData.Deserialize json string, которая содержит один кавычек, используя C#

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

Я получаю исключение при десериализации. Как я могу избежать одиночной цитаты?

Я проверил SO для подобных вопросов, но ничего не получил. Я также попробовал один из раствора упомянутого ИНТА HIS thread:

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

JsonConvert.SerializeObject(obj, settings); 

Но я получаю Newtonsoft оленьей кожи содержу Defination для StringEscapeHandling.

Кроме того, попытался сбежать с одного кадра в строке с \: '{\"LastName\": \"O\' Corner\",\"FirstName\":\"Mark\",\"Address\":\"123 James St\"}', который также не работал.

+0

I Предположим, что лучшим выбором является тщательная сериализация вашего объекта. Какая версия Newtonsoft.Json используется? 'StringEscapeHandling.EscapeHtml' существует в последней версии' 8.0.3' и отлично работает. –

ответ

2

Для начала можно заметить, что JSON syntax использует одинарные кавычки, в которых вы использовали двойные кавычки. Вот руководство для правильного синтаксиса:

JSON Syntax

Сейчас, к сожалению, JSON не позволяет использовать одинарные кавычки, как это, но мы можем использовать юникод \u0027 для апострофа и использовать настройки Serializer 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'}}" 

Это предполагает, что вы разбор строковым, в противном случае вам будет нужно бежать Юникод, чтобы дать:

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