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);
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With