Сериализация массива байтов в JSON.NET

Учитывая этот простой класс:

class HasBytes
{
    public byte[] Bytes { get; set; }
}

Я могу поместить его через JSON.NET, чтобы массив байтов был закодирован в base-64:

var bytes = new HasBytes { Bytes = new byte[] { 1, 2, 3, 4 } };
var json = JsonConvert.SerializeObject(bytes);

Затем я могу перечитать его еще раз таким немного усложненным способом:

TextReader textReader = new StringReader(json);
JsonReader jsonReader = new JsonTextReader(textReader);
var result = (HasBytes)JsonSerializer.Create(null)
                 .Deserialize(jsonReader, typeof(HasBytes));

Все хорошо. Но если я сначала превращу содержимое jsonReader в JToken:

var jToken = JToken.ReadFrom(jsonReader);

А затем снова превратите его в JsonReader, заключив в JTokenReader:

jsonReader = new JTokenReader(jToken);

Затем десериализация выдает исключение: «Ожидаемые байты, но полученная строка».

Разве новый JsonReader не должен быть логически эквивалентен исходному? Почему «сырая» версия JsonTextReader имеет возможность обрабатывать строку как массив байтов с основанием 64, а версия JTokenReader — нет?


person Daniel Earwicker    schedule 15.04.2010    source источник


Ответы (1)


Насколько я понимаю, это ошибка в JTokenReader, поэтому я сообщил об этом здесь.

Обновление: исправлено в JSON.NET 3.5 версии 7.

person Daniel Earwicker    schedule 15.04.2010