Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deserialize Dynamic Json string using Newtonsoft JSON.NET

I have a JSON string that I'm getting from Facebook API, in which I have a node whose name changes according to its content, for example some time it is 45, or 58 etc. It could be any number. I want its value. How to get it? Example:

{
"data": [
{
  "id": "1492292372_10201810786059989", 
  "created_time": "2014-04-05T09:00:54+0000"
}, 
{
  "id": "1492292372_10201804679827337", 
  "created_time": "2014-04-04T07:29:07+0000"
}, 
{
  "id": "1492292372_10201804649306574", 
  "created_time": "2014-04-04T07:10:33+0000"
}, 
{
  "id": "1492292372_10201801316823264", 
  "created_time": "2014-04-03T18:31:50+0000"
}, 
{
  "id": "1492292372_10201798962284402", 
  "created_time": "2014-04-03T06:24:47+0000"
}, 
{
  "message_tags": {
    "0": [
      {
        "id": "1492292372", 
        "name": "Yawar Sohail", 
        "type": "user", 
        "offset": 0, 
        "length": 12
      }
    ], 
    "15": [
      {
        "id": "1489845168", 
        "name": "Zeeshan Anjum", 
        "type": "user", 
        "offset": 15, 
        "length": 13
      }
    ]
  }, 
  "id": "1492292372_10201796274777216", 
  "created_time": "2014-04-02T17:57:05+0000"
}, 
{
  "id": "1492292372_10201794080482360", 
  "created_time": "2014-04-02T07:26:23+0000"
}, 

Inside message_tags there are two nodes [0 and 15] they dynamically changes according to their offset values. I want names, type and ids inside these nodes.

like image 696
Yawar Avatar asked Apr 07 '14 07:04

Yawar


People also ask

How do I deserialize dynamic JSON?

Dynamic; dynamic json = JsonSerializer. Deserialize<ExpandoObject>(jsonText); Console. WriteLine(json.name); This code prints out the string value of a name property that exists within the JSON text passed into the Deserialize method.

What is JsonConvert SerializeObject C#?

SerializeObject Method (Object, Type, JsonSerializerSettings) Serializes the specified object to a JSON string using a type, formatting and JsonSerializerSettings. Namespace: Newtonsoft.Json.

What is JsonConvert DeserializeObject?

DeserializeObject<T>(String,JsonConverter[]) Deserializes the JSON to the specified . NET type using a collection of JsonConverter. DeserializeObject(String, JsonSerializerSettings) Deserializes the JSON to a .

What is JObject parse in C#?

JObject class has parse method; it parses the JSON string and converts it into a Key-value dictionary object. In the following example, I have used “JObject. Parse” method and retrieved data using key. string jsonData = @"{ 'FirstName':'Jignesh', 'LastName':'Trivedi' }"; var details = JObject.


1 Answers

You can deserialize your JSON into an ExpandoObject:

var converter = new ExpandoObjectConverter();
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json, converter);

Which dynamically adds members to your object at runtime, and allows you to iterate over them as described in this answer:

foreach (var prop in obj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
   Console.WriteLine("Name: {0}, Value: {1}",prop.Name, prop.GetValue(obj,null));
}

That way you can iterate over obj.message_tags to get the individual messages, and obtain all their details respectively.

like image 120
aevitas Avatar answered Oct 08 '22 23:10

aevitas