Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deserialize JSON object into dynamic object using Json.net

Tags:

c#

.net

json.net

Is it possible to return a dynamic object from a json deserialization using json.net? I would like to do something like this:

dynamic jsonResponse = JsonConvert.Deserialize(json); Console.WriteLine(jsonResponse.message); 
like image 557
ryudice Avatar asked Dec 26 '10 23:12

ryudice


2 Answers

As of Json.NET 4.0 Release 1, there is native dynamic support:

[Test] public void DynamicDeserialization() {     dynamic jsonResponse = JsonConvert.DeserializeObject("{\"message\":\"Hi\"}");     jsonResponse.Works = true;     Console.WriteLine(jsonResponse.message); // Hi     Console.WriteLine(jsonResponse.Works); // True     Console.WriteLine(JsonConvert.SerializeObject(jsonResponse)); // {"message":"Hi","Works":true}     Assert.That(jsonResponse, Is.InstanceOf<dynamic>());     Assert.That(jsonResponse, Is.TypeOf<JObject>()); } 

And, of course, the best way to get the current version is via NuGet.

Updated (11/12/2014) to address comments:

This works perfectly fine. If you inspect the type in the debugger you will see that the value is, in fact, dynamic. The underlying type is a JObject. If you want to control the type (like specifying ExpandoObject, then do so.

enter image description here

like image 32
David Peden Avatar answered Oct 10 '22 19:10

David Peden


Json.NET allows us to do this:

dynamic d = JObject.Parse("{number:1000, str:'string', array: [1,2,3,4,5,6]}");  Console.WriteLine(d.number); Console.WriteLine(d.str); Console.WriteLine(d.array.Count); 

Output:

 1000  string  6 

Documentation here: LINQ to JSON with Json.NET

See also JObject.Parse and JArray.Parse

like image 119
Michael Pakhantsov Avatar answered Oct 10 '22 19:10

Michael Pakhantsov