web-dev-qa-db-fra.com

Sérialiser un objet directement sur un JObject au lieu d'une chaîne dans json.net

Comment sérialiser un objet directement dans une instance JObject dans JSON.Net? Ce qui est généralement fait est de convertir l'objet directement en json string comme ceci:

string jsonSTRINGResult = JsonConvert.SerializeObject(someObj);

On pourrait alors désérialiser ce retour à un JObject comme suit:

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

Cela semble fonctionner, mais il semblerait que cette façon ait un double impact sur les performances (sérialiser puis désérialiser). SerializeObject utilise-t-il en interne un JObject auquel on peut accéder d'une manière ou d'une autre? Ou existe-t-il un moyen de sérialiser directement vers un JObject?

24
Nicholas Petersen

Vous pouvez utiliser FromObject méthode statique de JObject

JObject jObj = JObject.FromObject(someObj)

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

40
Eser

Veuillez noter que la route JObject suggérée par @Eser ne fonctionnera que pour les objets CLR non-tableau. Il en résulte une exception ci-dessous si vous essayez de convertir un objet Array en JObject:

Une exception non gérée de type "System.InvalidCastException" s'est produite dans Newtonsoft.Json.dll

Informations supplémentaires: impossible de caster un objet de type 'Newtonsoft.Json.Linq.JArray' en type 'Newtonsoft.Json.Linq.JObject'.

Donc, dans le cas où il s'agit d'un objet tableau, vous devez plutôt utiliser JArray comme indiqué ci-dessous:

JArray jArray = JArray.FromObject(someArrayObject);

Merci d'inclure using Newtonsoft.Json.Linq; en haut de votre fichier de code pour utiliser cet extrait de code.

8
RBT