Serialización Array de Byte en JSON.NET -- serialization campo con bytearray campo con json.net camp Relacionados El problema

Byte array serialization in JSON.NET


7
vote

problema

Español

Dada esta clase simple:

  class HasBytes {     public byte[] Bytes { get; set; } }   

Puedo ponerlo a través de JSON.NET de tal manera que la matriz de bytes sea BASE-64 codificada:

  var bytes = new HasBytes { Bytes = new byte[] { 1, 2, 3, 4 } }; var json = JsonConvert.SerializeObject(bytes);   

Entonces puedo leerlo de nuevo de nuevo de esta manera ligeramente sobrecargada:

  TextReader textReader = new StringReader(json); JsonReader jsonReader = new JsonTextReader(textReader); var result = (HasBytes)JsonSerializer.Create(null)                  .Deserialize(jsonReader, typeof(HasBytes));   

todo bien. Pero si primero gozo el contenido de jsonReader en un JToken :

  <form [formGroup]="addUser" (ngSubmit)="submitUser()">      <input type="text" class="form-control" formControlName="user_phone"  appPhoneMasking> </form> 0  

y luego gire esa llamada en un <form [formGroup]="addUser" (ngSubmit)="submitUser()"> <input type="text" class="form-control" formControlName="user_phone" appPhoneMasking> </form> 111 enviándolo en un <form [formGroup]="addUser" (ngSubmit)="submitUser()"> <input type="text" class="form-control" formControlName="user_phone" appPhoneMasking> </form> 212 :

  <form [formGroup]="addUser" (ngSubmit)="submitUser()">      <input type="text" class="form-control" formControlName="user_phone"  appPhoneMasking> </form> 3  

Luego, la deserialización lanza una excepción: "Los bytes esperados pero tienen cuerdas".

¿No debería el nuevo JSONReader ser lógicamente equivalente al original? ¿Por qué el "código / código RAW> <form [formGroup]="addUser" (ngSubmit)="submitUser()"> <input type="text" class="form-control" formControlName="user_phone" appPhoneMasking> </form> 4 tiene la capacidad de tratar una cadena como una matriz BASE-64 BYTE, mientras que la versión <form [formGroup]="addUser" (ngSubmit)="submitUser()"> <input type="text" class="form-control" formControlName="user_phone" appPhoneMasking> </form> 5 no?

Original en ingles

Given this simple class:

class HasBytes {     public byte[] Bytes { get; set; } } 

I can put it through JSON.NET such that the byte array is base-64 encoded:

var bytes = new HasBytes { Bytes = new byte[] { 1, 2, 3, 4 } }; var json = JsonConvert.SerializeObject(bytes); 

Then I can read it back again in this slightly over-complicated way:

TextReader textReader = new StringReader(json); JsonReader jsonReader = new JsonTextReader(textReader); var result = (HasBytes)JsonSerializer.Create(null)                  .Deserialize(jsonReader, typeof(HasBytes)); 

All good. But if I first turn the contents of jsonReader into a JToken:

var jToken = JToken.ReadFrom(jsonReader); 

And then turn that back into a JsonReader by wrapping it in a JTokenReader:

jsonReader = new JTokenReader(jToken); 

Then the deserialization throws an exception: "Expected bytes but got string".

Shouldn't the new JsonReader be logically equivalent to the original one? Why does the "raw" JsonTextReader have the ability to treat a string as a base-64 byte array whereas the JTokenReader version does not?

        

Lista de respuestas

6
 
vote
vote
La mejor respuesta
 

Esto parece ser un error en JtokenReader en la medida en que puedo ver, por lo que he Lo informó aquí .

Actualización: fijada en json.net 3.5 versión 7.

 

This appears to be a bug in JTokenReader as far as I can see, so I've reported it here.

Update: fixed in JSON.NET 3.5 release 7.

 
 

Relacionados problema

2  Transformando los datos de JSON  ( Transforming json data ) 
Tengo un sitio web que tire de sus datos de una API de JSON. Esto se hace usando JSON.NET para traducir el JSON a las clases C # y que funciona muy bien, y lo...

2  Cómo evitar la serialización de las propiedades de la matriz de flotadores  ( How to avoid serializing the float array properties ) 
He usado una propiedad de matriz de flotador para CustomDashpattern y lo usé como por debajo del código, float[] customDashPattern = { 5, 3, 5, 3 }; publi...

75  ¿Cómo configurar JSOonserializersetters personalizados para JSON.NET en ASP.NET WEB API?  ( How to set custom jsonserializersettings for json net in asp net web api ) 
Entiendo que ASP.NET WEB API usa de forma nativa JSON.NET para (DE) Objetos serializados, pero ¿hay una manera de especificar un objeto FluentConfigurationEx...

2  ¿Una forma más fácil de encontrar elementos de niño profundo en un JSON profundamente anidado en Newtonsoft?  ( Easier way to find deep child elements in a deeply nested json in newtonsoft ) 
Tengo un archivo JSON muy profundamente anidado que es así: { // many levels of nesting, from 10 to 50 items: [{ video: { // some data } },...

4  Aplanando un jtago  ( Flattening out a jtoken ) 
Supongamos que tengo los siguientes JToken: @"{ ""data"": [ { ""company"": { ""ID"": ""12345"", ""l...

1  Guardar datos JSON en un objeto personalizado C #  ( Saving json data into a c sharp custom object ) 
He estado jugando con esto durante los últimos días y espero que alguien pueda arrojar algo de luz sobre lo que podría ser el problema. Tengo este objeto pe...

14  Desernialice JSON que tiene un nombre de propiedad que comienza con un número  ( Deserialize json that has some property name starting with a number ) 
Los datos JSON se ven así [ { "market_id": "21", "coin": "DarkCoin", "code": "DRK", "exchange": "BTC", "last_pr...

0  Análisis de JSON utilizando JSON.NET, matriz serializada como propiedades  ( Parsing json using json net array serialized as properties ) 
Estoy tratando de desercializar los datos de JSON formados de una manera que no he visto antes. Estoy usando json.net y c #. La clase correspondiente al JSO...

5  ¿Cómo usar JQGRID con C # / ASP.NET y JSON.NET (y NO AJAX.NET cosas)?  ( How to use jqgrid with c asp net and json net and no ajax net stuff ) 
OK, he estado investigando esto unos días y no estoy particularmente seguro de lo que estoy haciendo mal. Si alguien tiene ejemplos de trabajo de uso de JQGRI...

-1  Convertir cadena a objeto C #  ( Convert string to object c sharp ) 
¿Qué objeto tengo que usar para convertir la cadena JSON cuando uso regsvr325 Probé este objeto pero convertir falla: regsvr326 ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos