Reputation: 807
I want to parse a JSON data dynamically and read its key and their values without serializing it in a concrete class because the JSON data can be different time to time. But for the initial testing one sample data is like this . In this data I want to get property values and if the JSON data aslo contains complex structure I also want to read child property values also How to do that in C#.
{"id":4877891717,"email":"[email protected]","accepts_marketing":true,"created_at":"2017-03-24T08:39:56+01:00","updated_at":"2017-04-10T09:40:42+02:00","first_name":"Robin","last_name":"Van Persie","orders_count":8,"state":"disabled","total_spent":"2320.00","last_order_id":4434634693,"note":"","verified_email":true,"multipass_identifier":null,"tax_exempt":true,"phone":"+3225551212","tags":"","last_order_name":"#1116","addresses":[{"id":5143111941,"first_name":"Robin","last_name":"Van Persie","company":"InSync","address1":"CB 28, El Solo Road","address2":"CB 28, El Solo Road","city":"Brussels","province":"EU","country":"Belgium","zip":"123456","phone":"12345678","name":"Robin Van Persie","province_code":null,"country_code":"BE","country_name":"Belgium","default":true}],"default_address":{"id":5143111941,"first_name":"Robin","last_name":"Van Persie","company":"InSync","address1":"CB 28, El Solo Road","address2":"CB 28, El Solo Road","city":"Brussels","province":"EU","country":"Belgium","zip":"123456","phone":"12345678","name":"Robin Van Persie","province_code":null,"country_code":"BE","country_name":"Belgium","default":true}}
I am trying this way. But after geiing tiken what I will do.
foreach (JObject token in jObject.Children())
{}
Thanks
Upvotes: 1
Views: 13520
Reputation: 749
You can use NewtonsoftJson library to parse without creating concrete class
dynamic parseJson = JsonConvert.DeserializeObject("your json");
and get the value using below code like...
string Id=parseJson.Id.Value
I have tested it and it's working for me
Upvotes: 5
Reputation: 3387
You can use NewtonsoftJson library to parse data easily
dynamic x = Newtonsoft.Json.JsonConvert.DeserializeObject(Jsondata);
foreach (var product in x) {
Messagebox.show(product.data.ToString());
}
Upvotes: 1
Reputation: 2764
you have two options(as far as i know). you can generate a class acording to your json string then parse the result in it. like this:
public class Address
{
public long id { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
public string company { get; set; }
public string address1 { get; set; }
public string address2 { get; set; }
public string city { get; set; }
public string province { get; set; }
public string country { get; set; }
public string zip { get; set; }
public string phone { get; set; }
public string name { get; set; }
public object province_code { get; set; }
public string country_code { get; set; }
public string country_name { get; set; }
public bool @default { get; set; }
}
public class DefaultAddress
{
public long id { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
public string company { get; set; }
public string address1 { get; set; }
public string address2 { get; set; }
public string city { get; set; }
public string province { get; set; }
public string country { get; set; }
public string zip { get; set; }
public string phone { get; set; }
public string name { get; set; }
public object province_code { get; set; }
public string country_code { get; set; }
public string country_name { get; set; }
public bool @default { get; set; }
}
public class RootObject
{
public long id { get; set; }
public string email { get; set; }
public bool accepts_marketing { get; set; }
public string created_at { get; set; }
public string updated_at { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
public int orders_count { get; set; }
public string state { get; set; }
public string total_spent { get; set; }
public long last_order_id { get; set; }
public string note { get; set; }
public bool verified_email { get; set; }
public object multipass_identifier { get; set; }
public bool tax_exempt { get; set; }
public string phone { get; set; }
public string tags { get; set; }
public string last_order_name { get; set; }
public List<Address> addresses { get; set; }
public DefaultAddress default_address { get; set; }
}
then parse it(using json.net) like this:
var jObject=JsonConvert.DeserializeObject<RootObject>(responseString);
or you can use dynamic
object and deal with json result at runtime. like this:
var jObject=JsonConvert.DeserializeObject(responseString);
foreach (JObject token in jObject.Children)
Upvotes: 1