2012-02-09 2 views
6

Attualmente sto lavorando con json.net! So come deserializzare i dati JSON e come mappare con la nostra classe. Ora sono desideroso di alcune domande!È possibile in JSON?

Supponiamo miei jsonstrings è

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

e la mia classe di attributi (in cui voglio deserializzare sopra stringa) è

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

Ora sto usando seguente codice per la deserializzazione.!

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

E Ovviamente questo codice non funzionerà affatto per il jsonstring.

Ora Come posso associare questa coppia di valori nome in una classe ?? È possibile ?

In futuro, attributi possono b più di 10, ma formato sarà uguale coppia di valori nome

+0

Probabilmente si può usare la parola chiave 'dynamic' per creare un dizionario di dizionari, ad esempio dizionario NibblyPig

risposta

1

EDIT: Mi dispiace, ma in qualche modo ho interpretato la tua domanda, come se si volesse serialize, e non deserialize (ma terrò comunque l'originale di seguito, poiché penso che sia una buona conoscenza :)).

Provare a deserializzare la stringa JSON su Dictionary<string,string> anziché su Attribute. Ho il presentimento che potrebbe funzionare. Quindi, puoi regolare il resto del codice per utilizzare quel dizionario o puoi convertire in raccolta le tue istanze Attribute.


La risposta originale (relative al serializzazione, che era l'opposto di quello che hai chiesto) qui di seguito.

Io non la penso così, ma se l'intenzione è quella di utilizzare sul client in questo modo:

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

... allora quello che stai dopo è chiamato "array associativo", in quanto è equivalente a questo:

attributes.color 
attributes.price 

... come non è realmente un array, ma è un oggetto (javaScript fornisce questi due modi per fare riferimento proprietà dell'oggetto, ad esempio window.onload è la stessa window["onload"]) ...

... e lo si può ottenere con JavaScriptSerializer se si serializza Dictionary<string,string> in stringa JSON (in altre parole, si modifica la classe Attribute in KeyValuePair<string,string> oppure si crea in altro modo un dizionario diverso.

+0

Grazie! Funziona con 'Dictionary '! – Chintan