Dato questo semplice classe:Byte matrice serializzazione JSON.NET
class HasBytes
{
public byte[] Bytes { get; set; }
}
posso metterlo attraverso JSON.NET tale che la matrice di byte è codificato base-64:
var bytes = new HasBytes { Bytes = new byte[] { 1, 2, 3, 4 } };
var json = JsonConvert.SerializeObject(bytes);
Poi può leggerlo di nuovo in questo modo un po 'troppo complicato:
TextReader textReader = new StringReader(json);
JsonReader jsonReader = new JsonTextReader(textReader);
var result = (HasBytes)JsonSerializer.Create(null)
.Deserialize(jsonReader, typeof(HasBytes));
Tutto bene. Ma se io primo turno il contenuto di jsonReader
in un JToken
:
var jToken = JToken.ReadFrom(jsonReader);
e poi girare che di nuovo in un JsonReader
avvolgendolo in un JTokenReader
:
jsonReader = new JTokenReader(jToken);
Poi la deserializzazione genera un'eccezione: " Expected bytes ma got string ".
Il nuovo JsonReader non dovrebbe essere logicamente equivalente a quello originale? Perché il "raw" JsonTextReader
ha la capacità di trattare una stringa come matrice a 64 byte di base mentre la versione JTokenReader
no?