Json десереализация специальных символов - PullRequest
1 голос
/ 30 сентября 2019

Я хочу десериализовать BLOB-объект в пользовательский объект.

Из BLOB-объекта я получаю byte[], конвертирую в string, а затем, используя JSON.Net, десериализую в object.

public object FromByteArray(Type type, byte[] value)
{
    return JsonConvert.DeserializeObject(Encoding.UTF8.GetString(value), type);
}

Но иногда в одном из свойств есть капли со специальными символами.

"LogoUrl":"�PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u00002\u0000\u0000\u00002\b\u0003\u0000\u0000\u0000)�x�\u0000\u0000\u0001,PLTE������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������8�\u0000\u0000\u0001�IDATx^�e��0\u0010��i\u000b�����������%ò�!o�����>\t�ӜC��R�8\"R��I>2;5���+����\u0012=�(\u0010�ݱ�EDi\u0012C��׫\u0003����(\u001a�\u001a��_)\"�vTZ)���z`d\n��\u0010�qO�8�`\\&��ao�U��s\u0012�d\f�0�\u0018�\ty��(L�(���͞\u001c�\u0006[X���1*>a85�\u001d��T�u\u0000��n���0�F�����!xTZT\rU��\t���5��jxM�,�$\u001aۨ���\u0016U�%�*����\u0015�\u0000��7T\u0014�Y\u001a��\u000e���a�\u001c��)�oGB���\u0019ξ�(�c4|&�%�V��g\t��\u0004�4]�\f6ض��\"Fp!jYt�$d�?�ȥ9�pIi�Gh�aE[��;0����Q,C�?\u0003~\u000b,��,��?�J���M[��Nm\u0011�Ky\f��h�c�=D�D%\u0002���>��\"\tow!\u0004S���?��\u0006rI\u0003\u0011n��J�T��#����D�@\u0001��+�' �L\u0012F\u0003\u0004\tA�\u0007r�\bw&cm�\u0001�b\u001f��qi\u0000\u0000\u0000\u0000IEND�B`�"

Как я понимаю, его нельзя десериализовать по умолчанию. Я пытался добавить JsonSerializerSettings с параметром StringEscapeHandling.EscapeNonAscii, но это не помогло решить эту проблему.

Есть ли другой способ ее решения?

Пробовал также десериализовать строку для второговремя, это помогает получить объект, но не кажется, что это правильный путь.

1 Ответ

0 голосов
/ 30 сентября 2019

изменить тип кодировки с UTF8 на По умолчанию

public object FromByteArray(Type type, byte[] value)
{
    return JsonConvert.DeserializeObject(Encoding.Default.GetString(value), type);
}
...