2012-02-09 28 views
6

¡Actualmente estoy trabajando con json.net! Sé cómo deserializar los datos de json y cómo mapear con nuestra clase. ¡Ahora estoy ansioso por algunas consultas!¿Es esto posible en JSON?

Suponga mis jsonstrings es

"attributes":{ 
      "color":"Brown", 
      "condition":"Used", 
      "currency":"USD", 
      "price":"10500", 
      "price_display":"$10,500", 
     } 

y mi clase de atributo (en el que quiero por encima de deserializar cadena) es

Public class Attribute 
{ 
     public string name{ get; set; } 
     public string value{ get; set; } 
} 

Ahora estoy usando siguiente código de deserialización.!

JavaScriptSerializer ser = new JavaScriptSerializer(); 
<classname> p = ser.Deserialize<classname>(jsonString); 

Y, obviamente, este código no va a funcionar para jsonstring anterior en absoluto.

Ahora, ¿cómo puedo vincular este par de nombre y valor en una clase? Es posible ?

En el futuro, los atributos pueden ab más de 10, pero el formato será el mismo que el valor del nombre par

+0

Probablemente pueda utilizar la palabra clave 'dynamic' para crear un diccionario de diccionarios, p. Ej. Diccionario NibblyPig

Respuesta

1

EDIT: Lo siento, pero de alguna manera yo interpretaba su pregunta como si quisiera serializar, y no deserializar (pero voy a mantener el original a continuación de todos modos, ya que creo que es un buen conocimiento :)).

Intente deserializar su cadena JSON a Dictionary<string,string> en lugar de su Attribute. Tengo la corazonada de que podría funcionar. Luego, puede ajustar el resto de su código para usar ese diccionario o puede convertirlo a la colección de sus instancias Attribute.


La respuesta original (relacionada con la serialización , que era lo contrario de lo que pidieron) a continuación.

Yo no lo creo, pero si la intención es utilizarlo en el cliente de esta manera:

attributes["color"] // returns Brown 
attributes["price"] // returns 10500 

... entonces lo que está buscando se llama "matriz asociativa", ya que es equivalente a esto:

attributes.color 
attributes.price 

... ya que no es realmente una matriz, pero es un objeto (javascript proporciona estas dos maneras de hacer referencia a propiedades de los objetos, por ejemplo window.onload es el mismo que window["onload"]) ...

... y puede lograr esto con JavaScriptSerializer si serializa Dictionary<string,string> en cadena JSON (en otras palabras, cambie su clase Attribute a KeyValuePair<string,string>, o cree otro tipo de diccionario de otra manera.

+0

¡Gracias! Funciona con 'Dictionary '! – Chintan

Cuestiones relacionadas