Десериализация строк JSON с кавычками и апострофами - PullRequest
3 голосов
/ 05 марта 2012

Итак, у меня есть объект JSON, в котором один из строковых членов содержит такие символы, как кавычки (") и апострофы (').

Этот объект JSON возвращается сторонним API (который я не могу контролировать). Вот как я вызываю этот API:

var client = new WebClient();
var data = new NameValueCollection();              
var result = client.UploadValues(url, data);
MemoryStream ms = new MemoryStream(result);

Итак, когда я пытаюсь десериализовать эту строку следующим образом:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(MyClass));
MyClass obj= serializer.ReadObject(ms) as MyClass;
ms.Close();

Я получаю сообщение об ошибке "{" Обнаружен неожиданный символ '&'. "}".

Когда я читаю байтовый массив в строку, используя следующий код, я вижу, что символы амперсанда и апострофа кодируются как '& # 039' и '& quot;'.

MemoryStream ms2 = new MemoryStream(result);
ms2.Seek(0, SeekOrigin.Begin);
StreamReader sr = new StreamReader(ms2);
string s = sr.ReadToEnd();

Похоже, что десериализатору не нравятся символы амперсанда в строке JSON. что я делаю не так?

1 Ответ

0 голосов
/ 19 ноября 2013

http://json.org/ потому что это неправильный способ сериализации амперстанд и двойных кавычек ... Если у вас нет контроля над этим, я предлагаю вам html-декодирование, а затем добавочные косые черты ... Или найти и заменить...

...