2015-10-12 13 views
9

Come si può serializzare un oggetto direttamente su un'istanza JObject in JSON.Net? Ciò che è tipicamente fatto è quello di convertire l'oggetto direttamente a un JSON stringa in questo modo:Serializzare un oggetto direttamente su un JObject anziché su una stringa in json.net

string jsonSTRINGResult = JsonConvert.SerializeObject(someObj); 

Si potrebbe quindi deserialize che di nuovo ad un JObject come segue:

JObject jObj = JsonConvert.DeserializeObject<JObject>(jsonSTRINGResult); 

Che sembra lavoro, ma sembrerebbe che questo modo abbia un doppio risultato in termini di prestazioni (serializza e poi deserializza). SerializeObject utilizza internamente un JObject a cui è possibile accedere in qualche modo? O c'è un modo per serializzare direttamente direttamente su un JObject?

+1

Perché si desidera lavorare con un JObject nel codice rispetto al tipo/classe nativi? –

+0

http://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_Linq_JObject_FromObject.htm – Eser

+0

In breve, consente a Json.Net di occuparsi di tutte le operazioni di serializzazione difficile, permettendomi di fare alcune cose che voglio fare con il risultato finale della serializzazione, che non sarà di JSON. Se vuoi sapere (anche se questo è irrilevante per il problema specifico), voglio serializzare su XML in modo che gli attributi siano usati per le proprietà invece degli elementi figlio XML, come fa il serializzatore XML JSON.Net (comprensibilmente), forse alcune altre personalizzazioni. –

risposta

1

Si prega di notare che il percorso suggerito da JObject @Eser funziona solo per oggetti CLR non-array. Essa si traduce in un'eccezione qui sotto se si tenta di conversione di un oggetto Array per JObject:

un'eccezione non gestita di tipo 'System.InvalidCastException' in Newtonsoft.Json.dll

Ulteriori informazioni: Impossibile eseguire il cast oggetto di tipo 'Newtonsoft.Json.Linq.JArray' per digitare 'Newtonsoft.Json.Linq.JObject'.

Quindi, nel caso in cui si tratta di un oggetto array, allora si dovrebbe utilizzare JArray invece come illustrato di seguito:

JArray jArray = JArray.FromObject(someArrayObject); 

Si prega di includere using Newtonsoft.Json.Linq; nella parte superiore del vostro file di codice per utilizzare questo frammento di codice.

+0

Eccellente testa a testa, grazie! –