.NET MVC Unable to Deserialize JSON - c#

I am using the results from json2csharp.com on the response below from a GET request within my MVC Model:
{
"Id": 1111111,
"CreateLocation": "xxxxxxxxEZ-V12",
"ConstituentType": {
"Description": "Individual",
"Id": 1,
"Inactive": false,
"ConstituentGroup": {
"Description": "Individual",
"Id": 1,
"Inactive": false
}
},
"DisplayName": "xxxxxxxx xxxxxxxx",
"FirstName": "xxxxxxxx",
"Inactive": {
"Id": 1,
"Description": "Active",
"Inactive": false
},
"InactiveReason": null,
"LastActivityDate": "2016-10-16T02:32:15Z",
"LastName": "xxxxxxxx",
"MailIndicator": {
"Description": "(none)",
"Id": 3,
"Inactive": false
},
"EmarketIndicator": {
"Description": "(none)",
"Id": 3,
"Inactive": false
},
"MiddleName": "",
"NameStatus": {
"Description": " ",
"Id": 1,
"Inactive": false
},
"OriginalSource": {
"Description": "Test Test",
"Id": 4,
"Inactive": false
},
"PhoneIndicator": {
"Description": "(none)",
"Id": 3,
"Inactive": false
},
"Prefix": {
"Description": "",
"Id": -1,
"Inactive": false
},
"Gender": null,
"Suffix": {
"Description": "",
"Id": -1,
"Inactive": false
},
"Salutation": {
"BusinessTitle": null,
"CreatedDateTime": "2016-05-21T16:47:52Z",
"CreateLocation": "xxxxxxxxEZ-V12",
"Constituent": {
"Id": 8775975
},
"CreatedBy": "xxxxxxxx",
"Id": 912925,
"DefaultIndicator": true,
"EnvelopeSalutation1": "xxxxxxxx xxxxxxxx",
"EnvelopeSalutation2": "",
"Label": true,
"UpdatedDateTime": "2016-05-21T16:47:52.937Z",
"UpdatedBy": "xxxxxxxx",
"LetterSalutation": "xxxxxxxx xxxxxxxx",
"SalutationType": {
"Description": "Default",
"Id": 0,
"Inactive": false
},
"EditIndicator": true,
"IsFromAffiliation": false
},
"Address": {
"Id": 9781315,
"AffiliatedConstituent": null,
"AltSalutationType": {
"Description": "Default",
"Id": 0,
"Inactive": false
},
"AddressType": {
"Description": "Home Address",
"Id": 3,
"Inactive": false
},
"City": "Brooklyn",
"CreatedDateTime": "2016-05-21T16:47:52Z",
"CreateLocation": "xxxxxxxxEZ-V12",
"CreatedBy": "xxxxxxxx",
"Constituent": {
"Id": 8775975
},
"DeliveryPoint": "",
"EndDate": null,
"GeoArea": 35,
"Inactive": false,
"Label": true,
"UpdatedDateTime": "2016-09-21T16:00:46.497Z",
"UpdatedBy": "NCOA$STD",
"Months": "YYYYYYYYYYYY",
"NcoaAction": 3,
"NcoaSession": 9,
"PostalCode": "12121212",
"PostalCodeFormatted": "11205-2348",
"PrimaryIndicator": true,
"StartDate": null,
"State": {
"Description": "New York",
"StateCode": "NY",
"Id": 51,
"Inactive": false,
"Country": {
"Description": "USA",
"Id": 1,
"Inactive": false
}
},
"Street1": "11 Fadeaddress Ave",
"Street2": null,
"Street3": null,
"Country": {
"Description": "USA",
"Id": 1,
"Inactive": false
},
"EditIndicator": true,
"IsFromAffiliation": false
},
"ElectronicAddress": {
"Address": "test#test.edu",
"AffiliatedConstituent": null,
"AltSalutationType": null,
"CreatedDateTime": "2016-05-21T16:47:53Z",
"CreateLocation": "xxxxxxxxEZ-V12",
"CreatedBy": "xxxxxxxx",
"Constituent": {
"Id": 8775975
},
"Id": 9781317,
"ElectronicAddressType": {
"Description": "Home Email",
"Id": 1,
"Inactive": false,
"IsEmail": true
},
"EndDate": null,
"AllowHtmlFormat": true,
"Inactive": false,
"UpdatedDateTime": "2016-05-21T16:47:53.03Z",
"UpdatedBy": "xxxxxxxx",
"AllowMarketing": true,
"Months": "YYYYYYYYYYYY",
"PrimaryIndicator": true,
"StartDate": null,
"EditIndicator": true,
"IsFromAffiliation": false,
"IsEmail": true
},
"PrimaryPhoneNumbers": [
{
"Address": {
"Id": 9781315,
"AddressType": {
"Description": "Home Address",
"Id": 3,
"Inactive": false
}
},
"AllowTelemarketing": true,
"DayEveningIndicator": " ",
"Constituent": {
"Id": 8775975
},
"Id": 9781316,
"Inactive": false,
"PhoneNumber": "11111111",
"PhoneFormatted": "(917) 561-0972 ",
"PhoneSearch": "11111111",
"PhoneType": {
"Description": "Phone 1",
"Id": 1,
"Inactive": false
},
"CreatedBy": "xxxxxxxx",
"CreateLocation": "xxxxxxxxEZ-V12",
"CreatedDateTime": "2016-05-21T16:47:53Z",
"UpdatedDateTime": "2016-05-21T16:47:53.027Z",
"UpdatedBy": "xxxxxxxx",
"EditIndicator": true
}
],
"CreatedDateTime": "2015-05-23T14:03:23Z",
"CreatedBy": "xxxxxxxx",
"UpdatedDateTime": "2016-10-16T02:32:15.527Z",
"UpdatedBy": "dbo ",
"SortName": "xxxxxxxx/xxxxxxxx",
"Affiliates": [],
"ProtectionType": null
}
But when I try to deserialize the JSON output and return the results to my View with
//Storing the response details recieved from web api
var json = Res.Content.ReadAsStringAsync().Result;
//Deserializing the response recieved from web api and storing into the Employee list
EmpInfo = JsonConvert.DeserializeObject<List<Constituent>>(json);
I get the error Cannot deserialize the current JSON object...because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array...that can be deserialized from a JSON object.

Your example response is a single object, not an array. I can't see your implementation of Constituent but assume it matches that definition?
In which case you should be able to deserialize the single result (rather than a list) using:
EmpInfo = JsonConvert.DeserializeObject<Constituent>(json);

var result = JsonConvert.DeserializeObject<dynamic>(JSONtext)

Related

can't put content from restsharp to db

I am working with some API in C# Winforms. Getting response successfully as a json. The problem is that when I deserialize it the output is just a big string like this:
{"orders": [
{
"id": 155971090,
"date_created": "2021-06-18T06:16:31.36202+03:00",
"date_modified": "2021-06-19T15:10:45.567327+03:00",
"client_first_name": "Олександр",
"client_second_name": "",
"client_last_name": "Бандура",
"client_id": 133374423,
"client_avg_rating": 5.0,
"email": "bandurao#ukr.net",
"phone": "+380996461421",
"delivery_option": {
"id": 13662439,
"name": "Доставка \"Нова Пошта\""
},
"delivery_address": "Ананьїв, №1: вул. Незалежності, 19",
"delivery_provider_data": {
"provider": "nova_poshta",
"type": "W2W",
"sender_warehouse_id": null,
"recipient_warehouse_id": "4049834c-e1c2-11e3-8c4a-0050568002cf",
"declaration_number": null
},
"delivery_cost": 0,
"payment_option": {
"id": 7451891,
"name": "Передоплата"
},
"payment_data": null,
"price": "169,72 грн.",
"full_price": "169,72 грн.",
"client_notes": "",
"products": [
{
"id": 1430223923,
"external_id": "513.4769",
"name": "Ремень 4L-240",
"name_multilang": {
"ru": "Ремень 4L-240",
"uk": "Ремінь 4L-240"
},
"sku": "4769",
"price": "21,76 грн.",
"quantity": 1.0,
"measure_unit": "шт.",
"image": "https://images.ua.prom.st/3169964688_w100_h100_remen-4l-240.jpg",
"url": "https://teomax.com.ua/p1430223923-remen-240.html",
"total_price": "21,76 грн.",
"cpa_commission": {
"amount": "1.00"
}
},
{
"id": 1430222732,
"external_id": "512.4825",
"name": "Ремень 240 PJ3",
"name_multilang": {
"ru": "Ремень 240 PJ3",
"uk": "Ремінь 240 PJ3"
},
"sku": "4825",
"price": "48,96 грн.",
"quantity": 1.0,
"measure_unit": "шт.",
"image": "https://images.ua.prom.st/3170015051_w100_h100_remen-240-pj3.jpg",
"url": "https://teomax.com.ua/p1430222732-remen-240-pj3.html",
"total_price": "48,96 грн.",
"cpa_commission": {
"amount": "2.25"
}
},
{
"id": 1430230819,
"external_id": "297.2885",
"name": "Масло \"двухтактное\" (2Т), 1л",
"name_multilang": {
"ru": "Масло \"двухтактное\" (2Т), 1л",
"uk": "Масло \"двотактне\" (2Т), 1л"
},
"sku": "2885",
"price": "99 грн.",
"quantity": 1.0,
"measure_unit": "шт.",
"image": "https://images.ua.prom.st/3169999571_w100_h100_maslo-dvuhtaktnoe-2t.jpg",
"url": "https://teomax.com.ua/p1430230819-maslo-dvuhtaktnoe.html",
"total_price": "99 грн.",
"cpa_commission": {
"amount": "4.55"
}
}
],
"status": "delivered",
"status_name": "Выполнен",
"source": "portal",
"price_with_special_offer": null,
"special_offer_discount": null,
"special_offer_promocode": null,
"has_order_promo_free_delivery": false,
"cpa_commission": {
"amount": "7.80",
"is_refunded": false
},
"utm": null
},
{
"id": 155896081,
"date_created": "2021-06-17T13:11:40.241146+03:00",
"date_modified": "2021-06-17T13:42:55.021203+03:00",
"client_first_name": "Антон",
"client_second_name": "",
"client_last_name": "Подосельник",
"client_id": 133299120,
"client_avg_rating": 5.0,
"email": "a.n.podoselnik#gmail.com",
"phone": "+380992764450",
"delivery_option": {
"id": 13662439,
"name": "Доставка \"Нова Пошта\""
},
"delivery_address": "Киев, №132 (до 30 кг): просп. Леся Курбаса, 16-А",
"delivery_provider_data": {
"provider": "nova_poshta",
"type": "W2W",
"sender_warehouse_id": null,
"recipient_warehouse_id": "51b6c251-7a06-11e4-acce-0050568002cf",
"declaration_number": null
},
"delivery_cost": 0,
"payment_option": {
"id": 7451890,
"name": "Готівкою"
},
"payment_data": null,
"price": "254,30 грн.",
"full_price": "254,30 грн.",
"client_notes": "",
"products": [
{
"id": 1430208419,
"external_id": "250.4391",
"name": "Подшипник шариковый 12*30*8",
"name_multilang": {
"ru": "Подшипник шариковый 12*30*8",
"uk": "Підшипник кульковий 12*30*8"
},
"sku": "4391",
"price": "50,86 грн.",
"quantity": 5.0,
"measure_unit": "шт.",
"image": "https://images.ua.prom.st/3169911780_w100_h100_podshipnik-sharikovyj-12308.jpg",
"url": "https://teomax.com.ua/p1430208419-podshipnik-sharikovyj-12308.html",
"total_price": "254,30 грн.",
"cpa_commission": {
"amount": "5.08"
}
}
],
"status": "canceled",
"status_name": "Отменен",
"source": "portal",
"price_with_special_offer": null,
"special_offer_discount": null,
"special_offer_promocode": null,
"has_order_promo_free_delivery": false,
"cpa_commission": {
"amount": "5.08",
"is_refunded": true
},
"utm": null
},
{
"id": 155881650,
"date_created": "2021-06-17T11:36:11.87828+03:00",
"date_modified": "2021-06-17T13:10:11.527256+03:00",
"client_first_name": "Антон",
"client_second_name": "",
"client_last_name": "Подосельник",
"client_id": 133299120,
"client_avg_rating": 5.0,
"email": "a.n.podoselnik#gmail.com",
"phone": "+380992764450",
"delivery_option": {
"id": 13662439,
"name": "Доставка \"Нова Пошта\""
},
"delivery_address": "Киев, №132 (до 30 кг): просп. Леся Курбаса, 16-А",
"delivery_provider_data": {
"provider": "nova_poshta",
"type": "W2W",
"sender_warehouse_id": null,
"recipient_warehouse_id": "51b6c251-7a06-11e4-acce-0050568002cf",
"declaration_number": null
},
"delivery_cost": 0,
"payment_option": {
"id": 7451890,
"name": "Готівкою"
},
"payment_data": null,
"price": "305,16 грн.",
"full_price": "305,16 грн.",
"client_notes": "",
"products": [
{
"id": 1430208419,
"external_id": "250.4391",
"name": "Подшипник шариковый 12*30*8",
"name_multilang": {
"ru": "Подшипник шариковый 12*30*8",
"uk": "Підшипник кульковий 12*30*8"
},
"sku": "4391",
"price": "50,86 грн.",
"quantity": 6.0,
"measure_unit": "шт.",
"image": "https://images.ua.prom.st/3169911780_w100_h100_podshipnik-sharikovyj-12308.jpg",
"url": "https://teomax.com.ua/p1430208419-podshipnik-sharikovyj-12308.html",
"total_price": "305,16 грн.",
"cpa_commission": {
"amount": "6.10"
}
}
],
"status": "canceled",
"status_name": "Отменен",
"source": "portal",
"price_with_special_offer": null,
"special_offer_discount": null,
"special_offer_promocode": null,
"has_order_promo_free_delivery": false,
"cpa_commission": {
"amount": "6.10",
"is_refunded": true
},
"utm": null
}
]}
My function to get this is like this:
public IRestResponse GetOrders()
{
var connection = new RestClient("https://my.prom.ua/api/v1/");
connection.UseNewtonsoftJson();
var request = new RestRequest("orders/list", Method.GET, DataFormat.None);
request.AddHeader("authorization", "Bearer token");
var response = connection.Get(request);
//var things = JsonConvert.DeserializeObject<Dictionary<string, string>>(response.Content);
Console.WriteLine(response.Content);
return response;
}
Then I tried to make json object out of it and deserialize:
var jsonString = JToken.Parse(data.Content);
var obj = JObject.Parse(jsonString.ToString());
How can I make key value pair out of this and be able to put data into a db table?

c# json as not pulling data

I'm trying to pull some data but it doesn't parse as json, how can i do this, is there anyone who can throw it as code?
my code
var begendurum = await client.GetStringAsync("https://eu.mspapis.com/profilegeneratedcontent/v2/profiles/" + gonderilecek + "/games/j68d/content");
var jsonContent = JObject.Parse(begendurum);
var sondurum = jsonContent[0]["id"].ToString();
Console.Write(sondurum);
json body:
[{
"addedDate": "2021-03-21T09:15:36.6030275+00:00",
"complexity": 0,
"defaultSnapshotType": "snapshot",
"gameId": "j68d",
"id": "4037c9a6ef8e45f18094bfaa570d2977",
"lastEditedDate": "2021-03-21T09:15:36.8996736+00:00",
"lifecycleStatus": "Active",
"owner": "00037853cc134d4cbe970b6aedebe21d",
"participantIds": ["00037853cc134d4cbe970b6aedebe21d"],
"privacyStatus": "Public",
"publishedDate": "2021-03-21T09:15:36.8996736+00:00",
"type": "WAYD",
"resources": [{
"id": "profiles/00037853cc134d4cbe970b6aedebe21d/j68d/wayd/4037c9a6ef8e45f18094bfaa570d2977/437e53a188414c7b96058a15790f660d",
"type": "PgcV1"
}]
}, {
"addedDate": "2021-03-21T09:13:06.0389296+00:00",
"complexity": 0,
"defaultSnapshotType": "snapshot",
"gameId": "j68d",
"id": "55335bca6496404587f90e0d4a1adb24",
"lastEditedDate": "2021-03-21T09:13:06.2070069+00:00",
"lifecycleStatus": "Active",
"owner": "00037853cc134d4cbe970b6aedebe21d",
"participantIds": ["00037853cc134d4cbe970b6aedebe21d"],
"privacyStatus": "Public",
"publishedDate": "2021-03-21T09:13:06.2070069+00:00",
"type": "WAYD",
"resources": [{
"id": "profiles/00037853cc134d4cbe970b6aedebe21d/j68d/wayd/55335bca6496404587f90e0d4a1adb24/37d1d9eb02a24842bd3f10b50bca2213",
"type": "PgcV1"
}]
}, {
"addedDate": "2021-03-21T08:58:37.6752327+00:00",
"complexity": 0,
"defaultSnapshotType": "snapshot",
"gameId": "j68d",
"id": "aa1f7e060c88418f9c7815665922d304",
"lastEditedDate": "2021-03-21T08:58:38.1642128+00:00",
"lifecycleStatus": "Active",
"owner": "00037853cc134d4cbe970b6aedebe21d",
"participantIds": ["00037853cc134d4cbe970b6aedebe21d"],
"privacyStatus": "Public",
"publishedDate": "2021-03-21T08:58:38.1642128+00:00",
"type": "WAYD",
"resources": [{
"id": "profiles/00037853cc134d4cbe970b6aedebe21d/j68d/wayd/aa1f7e060c88418f9c7815665922d304/6333938ca3114a56bcb150cd7b1d9bd5",
"type": "PgcV1"
}]
}, {
"addedDate": "2021-03-21T08:19:08.0288282+00:00",
"complexity": 0,
"defaultSnapshotType": "full",
"gameId": "j68d",
"id": "083b37b1c18c49228771e16183a88436",
"lastEditedDate": "2021-03-21T08:19:08.0288282+00:00",
"lifecycleStatus": "Active",
"owner": "00037853cc134d4cbe970b6aedebe21d",
"participantIds": [],
"privacyStatus": "Public",
"publishedDate": "2021-03-21T08:19:08.0288282+00:00",
"type": "avatar",
"resources": [{
"id": "profiles/00037853cc134d4cbe970b6aedebe21d/j68d/avatar/083b37b1c18c49228771e16183a88436/ad8ff2491104489da5a98ea31ee02fe4",
"type": "PgcV1"
}, {
"id": "profiles/00037853cc134d4cbe970b6aedebe21d/j68d/avatar/083b37b1c18c49228771e16183a88436/9e0298665ae6446ab80f8fe9bfb43a54.png",
"type": "face"
}, {
"id": "profiles/00037853cc134d4cbe970b6aedebe21d/j68d/avatar/083b37b1c18c49228771e16183a88436/6caeef28c90846bda5cf9a71470c2be0.png",
"type": "full"
}]
}]
Use Json.Parse(begendurum);
var begendurum = await client.GetStringAsync("https://eu.mspapis.com/profilegeneratedcontent/v2/profiles/" + gonderilecek + "/games/j68d/content");
var jsonContent = Json.Parse(begendurum);
var sondurum = jsonContent[0]["id"].ToString();
Console.Write(sondurum);

How to convert this woocommerce json format to list in C#?

enter image description here [
{
"id": 2532,
"parent_id": 0,
"number": "2532",
"order_key": "wc_order_FgqugoSiTCm8C",
"created_via": "checkout",
"version": "3.8.1",
"status": "completed",
"currency": "SGD",
"date_created": "2020-05-22T07:03:19",
"date_created_gmt": "2020-05-22T07:03:19",
"date_modified": "2020-05-22T07:06:40",
"date_modified_gmt": "2020-05-22T07:06:40",
"discount_total": "0.00",
"discount_tax": "0.00",
"shipping_total": "42.00",
"shipping_tax": "0.00",
"cart_tax": "0.00",
"total": "47.50",
"total_tax": "0.00",
"prices_include_tax": false,
"customer_id": 1,
"customer_ip_address": "157.46.19.210",
"customer_user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
"customer_note": "",
"billing": {
"first_name": "Sala",
"last_name": "Printer Test",
"company": "",
"address_1": "sdfgsdf",
"address_2": "",
"city": "",
"state": "",
"postcode": "476456",
"country": "SG",
"email": "ecommerce#unipro.com.sg",
"phone": "5674645"
},
"shipping": {
"first_name": "Sala",
"last_name": "Printer Test",
"company": "",
"address_1": "sdfgsdf",
"address_2": "",
"city": "",
"state": "",
"postcode": "476456",
"country": "SG"
},
"payment_method": "cod",
"payment_method_title": "Cash on delivery",
"transaction_id": "",
"date_paid": "2020-05-22T07:06:40",
"date_paid_gmt": "2020-05-22T07:06:40",
"date_completed": "2020-05-22T07:06:40",
"date_completed_gmt": "2020-05-22T07:06:40",
"cart_hash": "4ebf26dee924ed591c6160c0f21d7fe4",
"meta_data": [
{
"id": 42356,
"key": "is_vat_exempt",
"value": "no"
}
],
"line_items": [
{
"id": 17,
"name": "COCONUT OIL KERAL",
"product_id": 2511,
"variation_id": 0,
"quantity": 1,
"tax_class": "",
"subtotal": "4.50",
"subtotal_tax": "0.00",
"total": "4.50",
"total_tax": "0.00",
"taxes": [],
"meta_data": [],
"sku": "106096",
"price": 4.5
},
{
"id": 18,
"name": "STAR",
"product_id": 2512,
"variation_id": 0,
"quantity": 1,
"tax_class": "",
"subtotal": "1.00",
"subtotal_tax": "0.00",
"total": "1.00",
"total_tax": "0.00",
"taxes": [],
"meta_data": [],
"sku": "106081",
"price": 1
}
],
"tax_lines": [],
"shipping_lines": [
{
"id": 19,
"method_title": "Flat rate",
"method_id": "flat_rate",
"instance_id": "20",
"total": "42.00",
"total_tax": "0.00",
"taxes": [],
"meta_data": [
{
"id": 155,
"key": "Items",
"value": "COCONUT OIL KERAL × 1, STAR × 1"
}
]
}
],
"fee_lines": [],
"coupon_lines": [],
"refunds": [],
"currency_symbol": "$",
"_links": {
"self": [
{
"href": "https://uniprogroups.com/collegecollection/wp-json/wc/v2/orders/2532"
}
],
"collection": [
{
"href": "https://uniprogroups.com/collegecollection/wp-json/wc/v2/orders"
}
],
"customer": [
{
"href": "https://uniprogroups.com/collegecollection/wp-json/wc/v2/customers/1"
}
]
}
},
{
"id": 2527,
"parent_id": 0,
"number": "2527",
"order_key": "wc_order_ru3ymWKbxuaib",
"created_via": "checkout",
"version": "3.8.1",
"status": "processing",
"currency": "SGD",
"date_created": "2020-05-22T04:32:25",
"date_created_gmt": "2020-05-22T04:32:25",
"date_modified": "2020-05-22T04:32:25",
"date_modified_gmt": "2020-05-22T04:32:25",
"discount_total": "0.00",
"discount_tax": "0.00",
"shipping_total": "42.00",
"shipping_tax": "0.00",
"cart_tax": "0.00",
"total": "44.50",
"total_tax": "0.00",
"prices_include_tax": false,
"customer_id": 1,
"customer_ip_address": "157.46.19.210",
"customer_user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
"customer_note": "",
"billing": {
"first_name": "Sala",
"last_name": "Printer Test",
"company": "",
"address_1": "sdfgsdf",
"address_2": "",
"city": "",
"state": "",
"postcode": "476456",
"country": "SG",
"email": "ecommerce#unipro.com.sg",
"phone": "5674645"
},
"shipping": {
"first_name": "Sala",
"last_name": "Printer Test",
"company": "",
"address_1": "sdfgsdf",
"address_2": "",
"city": "",
"state": "",
"postcode": "476456",
"country": "SG"
},
"payment_method": "cod",
"payment_method_title": "Cash on delivery",
"transaction_id": "",
"date_paid": null,
"date_paid_gmt": null,
"date_completed": null,
"date_completed_gmt": null,
"cart_hash": "932d91bdbf989a4c8c3ea868474dfed8",
"meta_data": [
{
"id": 42316,
"key": "is_vat_exempt",
"value": "no"
}
],
"line_items": [
{
"id": 14,
"name": "AMBI 1100",
"product_id": 2514,
"variation_id": 0,
"quantity": 1,
"tax_class": "",
"subtotal": "0.00",
"subtotal_tax": "0.00",
"total": "0.00",
"total_tax": "0.00",
"taxes": [],
"meta_data": [],
"sku": "106015",
"price": 0
},
{
"id": 15,
"name": "GRB GASOGOLLA",
"product_id": 2515,
"variation_id": 0,
"quantity": 1,
"tax_class": "",
"subtotal": "2.50",
"subtotal_tax": "0.00",
"total": "2.50",
"total_tax": "0.00",
"taxes": [],
"meta_data": [],
"sku": "106014",
"price": 2.5
}
],
"tax_lines": [],
"shipping_lines": [
{
"id": 16,
"method_title": "Flat rate",
"method_id": "flat_rate",
"instance_id": "20",
"total": "42.00",
"total_tax": "0.00",
"taxes": [],
"meta_data": [
{
"id": 131,
"key": "Items",
"value": "AMBI 1100 × 1, GRB GASOGOLLA × 1"
}
]
}
],
"fee_lines": [],
"coupon_lines": [],
"refunds": [],
"currency_symbol": "$",
"_links": {
"self": [
{
"href": "https://uniprogroups.com/collegecollection/wp-json/wc/v2/orders/2527"
}
],
"collection": [
{
"href": "https://uniprogroups.com/collegecollection/wp-json/wc/v2/orders"
}
],
"customer": [
{
"href": "https://uniprogroups.com/collegecollection/wp-json/wc/v2/customers/1"
}
]
}
}
]
Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current JSON array (e.g. [1,2,3]) into type '_Model.orderClass+oderlist' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly. To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List that can be deserialized from a JSON array.
You're trying to deserialize a list of objects to a single object. Modify your deserialize call, it should look similar to this example
JsonConvert.DeserializeObject<List<Customer>>(json);

Print certain value from a JSON response

Just started playing with C# again and I'm not able to get over this.
I have the following JSON content:
{
"type": "success",
"picks": [
{
"aftermarket": {
"domain": "ao38t8u4h.com",
"fast_transfer": false,
"price": 0,
"status": "notfound",
"type": "",
"username": ""
},
"domain": "ao38t8u4h.com",
"info": "",
"priority": 1,
"status": {
"available": true,
"lookupType": "EPP",
"name": "ao38t8u4h.com",
"premium": false
},
"tld": "com",
"type": "domain"
},
{
"aftermarket": {
"domain": "ao38t8u4h.net",
"fast_transfer": false,
"price": 0,
"status": "notfound",
"type": "",
"username": ""
},
"domain": "ao38t8u4h.net",
"info": "",
"priority": 2,
"status": {
"available": true,
"lookupType": "EPP",
"name": "ao38t8u4h.net",
"premium": false
},
"tld": "net",
"type": "domain"
},
{
"aftermarket": {
"domain": "ao38t8u4h.dev",
"fast_transfer": false,
"price": 0,
"status": "notfound",
"type": "",
"username": ""
},
"domain": "ao38t8u4h.dev",
"info": "",
"priority": 3,
"status": {
"available": true,
"lookupType": "EPP",
"name": "ao38t8u4h.dev",
"premium": false
},
"tld": "dev",
"type": "domain"
},
{
"aftermarket": {
"domain": "ao38t8u4h.ai",
"fast_transfer": false,
"price": 0,
"status": "notfound",
"type": "",
"username": ""
},
"domain": "ao38t8u4h.ai",
"info": "",
"priority": 4,
"status": {
"available": true,
"lookupType": "EPP",
"name": "ao38t8u4h.ai",
"premium": false
},
"tld": "ai",
"type": "domain"
},
{
"aftermarket": {
"domain": "ao38t8u4h.org",
"fast_transfer": false,
"price": 0,
"status": "notfound",
"type": "",
"username": ""
},
"domain": "ao38t8u4h.org",
"info": "",
"priority": 5,
"status": {
"available": true,
"lookupType": "EPP",
"name": "ao38t8u4h.org",
"premium": false
},
"tld": "org",
"type": "domain"
}
]
}
What I'd like to do is obtain the value in ["picks"][0]["status"]["premium"]. What I'd do in Python would be to get the response and then simply print(var["picks"][0]["status"]["premium"]) to print the value; however, I don't know how to accomplish this in C#.
The code I'm using is the following:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net.Http;
using Newtonsoft.Json;
namespace testing
{
class Program
{
private static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
try
{
string domain = "ao38t8u4h";
string url = "https://rtb.namecheapapi.com/api/picks/" + domain;
string responseBody = await client.GetStringAsync(url);
var json = JsonConvert.DeserializeObject(responseBody);
Console.WriteLine(json);
Console.ReadLine();
}
catch(HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
Console.ReadLine();
}
}
}
}
Json.Net supports the syntax you are used to if you use JTokens.
JToken jt = JToken.Parse(responseBody);
Console.WriteLine(jt["picks"][0]["status"]["premium"]);
Fiddle: https://dotnetfiddle.net/BssMHq
In addition to #mjwills:
Deserialize json. Then print value like so:
Console.WriteLine($"Value = {json.Picks[0].Status.Premium}");

C# parse JSON access to child object

I have this JSON:
{
"total": 23695,
"total_pages": 1185,
"results": [{
"id": "r7bVvV7MLdQ",
"created_at": "2018-01-17T06:38:03-05:00",
"updated_at": "2018-05-09T03:35:24-04:00",
"width": 4032,
"height": 2526,
"color": "#F7EDE7",
"description": null,
"urls": {
"raw": "https://images.unsplash.com/photo-1516189050082-44d4deb5ceef?ixlib=rb-0.3.5\u0026ixid=eyJhcHBfaWQiOjEyMDd9\u0026s=8b6caac6353f390fbbabde8441dd1959",
"full": "https://images.unsplash.com/photo-1516189050082-44d4deb5ceef?ixlib=rb-0.3.5\u0026q=85\u0026fm=jpg\u0026crop=entropy\u0026cs=srgb\u0026ixid=eyJhcHBfaWQiOjEyMDd9\u0026s=89ca725623d794116d3741907c93ceab",
"regular": "https://images.unsplash.com/photo-1516189050082-44d4deb5ceef?ixlib=rb-0.3.5\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=1080\u0026fit=max\u0026ixid=eyJhcHBfaWQiOjEyMDd9\u0026s=666eb6ac25c7fec68d5994545b933726",
"small": "https://images.unsplash.com/photo-1516189050082-44d4deb5ceef?ixlib=rb-0.3.5\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=400\u0026fit=max\u0026ixid=eyJhcHBfaWQiOjEyMDd9\u0026s=3dbc611c97d323ff8b4b043cff19317b",
"thumb": "https://images.unsplash.com/photo-1516189050082-44d4deb5ceef?ixlib=rb-0.3.5\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=200\u0026fit=max\u0026ixid=eyJhcHBfaWQiOjEyMDd9\u0026s=0c760185c35eadb31a7bba9b9794d424"
},
"links": {
"self": "https://api.unsplash.com/photos/r7bVvV7MLdQ",
"html": "https://unsplash.com/photos/r7bVvV7MLdQ",
"download": "https://unsplash.com/photos/r7bVvV7MLdQ/download",
"download_location": "https://api.unsplash.com/photos/r7bVvV7MLdQ/download"
},
"categories": [],
"sponsored": false,
"likes": 0,
"liked_by_user": false,
"current_user_collections": [],
"slug": "cloud-smoke-steam",
"user": {
"id": "G69mdFHx0X0",
"updated_at": "2018-05-03T14:00:07-04:00",
"username": "maxkuk",
"name": "Max Kukurudziak",
"first_name": "Max",
"last_name": "Kukurudziak",
"twitter_username": null,
"portfolio_url": "http://www.instagram.com/makckuk",
"bio": "Product Designer at MacPaw, Lecturer at Projector",
"location": "Kiev, Ukraine",
"links": {
"self": "https://api.unsplash.com/users/maxkuk",
"html": "https://unsplash.com/#maxkuk",
"photos": "https://api.unsplash.com/users/maxkuk/photos",
"likes": "https://api.unsplash.com/users/maxkuk/likes",
"portfolio": "https://api.unsplash.com/users/maxkuk/portfolio",
"following": "https://api.unsplash.com/users/maxkuk/following",
"followers": "https://api.unsplash.com/users/maxkuk/followers"
},
"profile_image": {
"small": "https://images.unsplash.com/profile-1518780839522-ee199eceaf8c?ixlib=rb-0.3.5\u0026q=80\u0026fm=jpg\u0026crop=faces\u0026cs=tinysrgb\u0026fit=crop\u0026h=32\u0026w=32\u0026s=c37d2f2844b45f52c0f66cd580a200c8",
"medium": "https://images.unsplash.com/profile-1518780839522-ee199eceaf8c?ixlib=rb-0.3.5\u0026q=80\u0026fm=jpg\u0026crop=faces\u0026cs=tinysrgb\u0026fit=crop\u0026h=64\u0026w=64\u0026s=93647049c20b6a323870fe0886eee329",
"large": "https://images.unsplash.com/profile-1518780839522-ee199eceaf8c?ixlib=rb-0.3.5\u0026q=80\u0026fm=jpg\u0026crop=faces\u0026cs=tinysrgb\u0026fit=crop\u0026h=128\u0026w=128\u0026s=aff2d13afe9fe418b562b85c226b7e8e"
},
"instagram_username": "makckuk",
"total_collections": 0,
"total_likes": 6,
"total_photos": 56
},
"tags": [{
"title": "cloud"
},
{
"title": "smoke"
},
{
"title": "steam"
},
{
"title": "mountain"
},
{
"title": "volcano"
},
{
"title": "blue"
},
{
"title": "rock"
},
{
"title": "glacier"
},
{
"title": "field"
},
{
"title": "geysir"
},
{
"title": "iceland"
}],
"photo_tags": [{
"title": "cloud"
},
{
"title": "smoke"
},
{
"title": "steam"
},
{
"title": "mountain"
},
{
"title": "volcano"
},
{
"title": "blue"
},
{
"title": "rock"
},
{
"title": "glacier"
},
{
"title": "field"
},
{
"title": "geysir"
},
{
"title": "iceland"
}]
},
I need to get results.profile_image.small I tried it on many ways but I never figured out how to access to profile_image fields.
Basically I want to do something like this:
dynamic array = JsonConvert.DeserializeObject(responz);
foreach (var itemx in array["results"])
{
MessageBox.Show(itemx.profile_image.small.ToString());
}
I spent last few hours figuring it out, searching searching StackOverflow. The last option is do this with regex which would be very stupid thing to do.
Based on your JSON, the actual path should be:
itemx.user.profile_image.small
So if you modify your code to include the missing "user" portion:
dynamic array = JsonConvert.DeserializeObject(responz);
foreach (var itemx in array["results"])
{
MessageBox.Show(itemx.user.profile_image.small.ToString());
}
That should solve your problem.
However, this problem would likely not have presented itself if you were using a concrete class to deserialize into. You would have type safety and the assistance of Intelisense if you use a concrete class. You can easily convert your JSON sample into a concrete class using Json2CSharp or using the "Paste as Class" function of modern Visual Studio versions.

Categories