2010-04-15 20 views
7

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?

risposta

6

Questo sembra essere un bug in JTokenReader per quanto posso vedere, quindi ho reported it here.

Aggiornamento: fisso in JSON.NET 3.5 versione 7.

Problemi correlati