Compte tenu de cette classe simple:octets sérialisation tableau dans JSON.NET
class HasBytes
{
public byte[] Bytes { get; set; }
}
je peux le mettre dans JSON.NET de telle sorte que le tableau d'octets est Codé à base 64:
var bytes = new HasBytes { Bytes = new byte[] { 1, 2, 3, 4 } };
var json = JsonConvert.SerializeObject(bytes);
Je peut le lire de nouveau de cette manière un peu compliquée:
TextReader textReader = new StringReader(json);
JsonReader jsonReader = new JsonTextReader(textReader);
var result = (HasBytes)JsonSerializer.Create(null)
.Deserialize(jsonReader, typeof(HasBytes));
Tout va bien. Mais si j'examinerai tout d'abord le contenu de jsonReader
en JToken
:
var jToken = JToken.ReadFrom(jsonReader);
Et puis transformer ce retour dans un JsonReader
en l'enveloppant dans un JTokenReader
:
jsonReader = new JTokenReader(jToken);
Alors le désérialisation jette une exception: " Octets attendus mais chaîne de caractères ".
Le nouveau JsonReader ne devrait-il pas être logiquement équivalent à l'original? Pourquoi le "brut" JsonTextReader
a la possibilité de traiter une chaîne comme un tableau de base de 64 octets alors que la version JTokenReader
ne le fait pas?