¿Cómo puedo deserializar emoji en json en C#
json.net (1)
Tengo un archivo json que incluye emoji cuando quiero deserializarlo, no podría deserializar emoji a cadena. mi código es:
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());
el error es:
{"Input string was not in a correct format."}
cuando elimino emoji, funciona bien.
Muchas gracias por tu ayuda
Su problema es que esta parte de su cadena de mensaje no se ajusta al estándar JSON :
"/u{1F3FD}"
De acuerdo con el estándar, /u four-hex-digits
representa un literal de carácter unicode dado por el valor hexadecimal de su punto de código. Su cadena /u{1F3FD}
con sus llaves no cumple con esta convención, por lo que Json.NET arroja una excepción al intentar analizarla. Verá un error similar si sube su JSON a https://jsonformatter.curiousconcept.com/ .
Por lo tanto, parece que para arreglar tu JSON para que se ajuste al estándar, necesitas formatear tu personaje como /uXXXX
usando los 4 dígitos hexadecimales apropiados. Sin embargo, tu personaje, U+1F3FD
, es más grande que 0xFFFF y no existe en el plano multilingüe básico Unicode. No se puede representar como un solo número hexadecimal de 4 dígitos. c # (y utf-16 en general ) representa dichos caracteres Unicode como pares de sustitución : pares de dos caracteres de dos bytes. Deberás hacer lo mismo aquí. La representación UTF-16 (hex) de tu personaje es
0xD83C 0xDFFD
Por lo tanto, tu personaje JSON debe ser:
/uD83C/uDFFD
Y para toda tu cadena:
{"message":"jjasdajdasjdj laslla aasdasd ssdfdsf!!! 🙌/uD83C/uDFFD", "updated_time":"2015-04-14T22:37:13+0000", "id":"145193995506_148030368559"}