как я могу десериализовать смайлики в json на С#

У меня есть файл json, который включает смайлики, когда я хочу его десериализовать, он не может десериализовать смайлики в строку. мой код:

var mystring ={"message":"jjasdajdasjdj laslla aasdasd ssdfdsf!!! ????\u{1F3FD}", "updated_time":"2015-04-14T22:37:13+0000", "id":"145193995506_148030368559"}

FaceBookIdea ideaDetails = JsonConvert.DeserializeObject<FaceBookIdea>((mystring).ToString());

ошибка:

{"Input string was not in a correct format."}

когда я удаляю смайлики, это работает хорошо.

Большое спасибо за вашу помощь


person Razi    schedule 07.12.2015    source источник
comment
Покажите нам определение FaceBookIdea.   -  person Ralf    schedule 07.12.2015


Ответы (1)


Ваша проблема в том, что эта часть строки вашего сообщения не соответствует стандарту JSON:

"\u{1F3FD}"

Согласно стандарту, \u four-hex-digits представляет литерал символа Юникода, заданный шестнадцатеричным значением его кодовой точки. Ваша строка \u{1F3FD} с ее фигурными скобками не соответствует этому соглашению, поэтому Json.NET выдает исключение при попытке ее анализа. Вы увидите аналогичную ошибку, если загрузите свой JSON на https://jsonformatter.curiousconcept.com/.

Таким образом, казалось бы, чтобы исправить ваш JSON, чтобы он соответствовал стандарту, вам нужно отформатировать свой символ, например \uXXXX, используя соответствующие 4 шестнадцатеричных цифры. Однако ваш символ U+1F3FD больше 0xFFFF и не не существует в базовом многоязычном уровне Unicode. Его нельзя представить в виде одного 4-значного шестнадцатеричного числа. c# (и utf-16 вообще) представляет такие символы Unicode как суррогатные пары -- пары двух двухбайтовых символы. Здесь вам нужно будет сделать то же самое. UTF-16 (hex) представление вашего символа

0xD83C 0xDFFD 

Таким образом, ваш персонаж JSON должен быть:

\uD83C\uDFFD

И для всей вашей строки:

{"message":"jjasdajdasjdj laslla aasdasd ssdfdsf!!! ????\uD83C\uDFFD", "updated_time":"2015-04-14T22:37:13+0000", "id":"145193995506_148030368559"}
person dbc    schedule 07.12.2015
comment
вы можете найти полный список эмодзи в качестве суррогатных пар здесь - person shanraisshan; 14.02.2017