Dado esta clase simple:Byte array serialización en JSON.NET
class HasBytes
{
public byte[] Bytes { get; set; }
}
I puede poner a través JSON.NET tal que la matriz de bytes es base-64 codificada:
var bytes = new HasBytes { Bytes = new byte[] { 1, 2, 3, 4 } };
var json = JsonConvert.SerializeObject(bytes);
Entonces puede leerlo de nuevo de esta manera un poco demasiado complicada:
TextReader textReader = new StringReader(json);
JsonReader jsonReader = new JsonTextReader(textReader);
var result = (HasBytes)JsonSerializer.Create(null)
.Deserialize(jsonReader, typeof(HasBytes));
Todo bien. Pero si lo encienda por primera vez el contenido de jsonReader
en un JToken
:
var jToken = JToken.ReadFrom(jsonReader);
y después a la que de nuevo en un JsonReader
envolviéndolo en un JTokenReader
:
jsonReader = new JTokenReader(jToken);
A continuación, la deserialización se emite una excepción: " Se esperaban bytes pero obtuve la cadena ".
¿No debería el nuevo JsonReader ser lógicamente equivalente al original? ¿Por qué el JsonTextReader
"en bruto" tiene la capacidad de tratar una cadena como una matriz de bytes de base 64 mientras que la versión JTokenReader
no lo hace?