2010-04-15 6 views
7

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?

Répondre

6

Cela semble être un bug dans JTokenReader autant que je peux voir, donc j'ai reported it here.

Mise à jour: fixe dans JSON.NET version 3.5 7.