Учитывая этот простой класс:Байт сериализация массива в Json.NET
class HasBytes
{
public byte[] Bytes { get; set; }
}
я могу положить его через Json.NET таким образом, что массив является базой 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 быть логически эквивалентен оригинальному? Почему «raw» JsonTextReader
имеет возможность обрабатывать строку в виде байтового массива base-64, тогда как версия JTokenReader
нет?