Проблемы десериализации json в C#
Я заранее извиняюсь, так как это, вероятно, легко исправить и будет слишком раздражать всех, кто его читает. Однако заранее спасибо за любую оказанную помощь! Я не кодировал уже много лет, однако недавние события требуют, чтобы я снова взял трубку. Я никогда не кодировал ни в чем, кроме VB6, так что для меня это всего лишь процесс обучения. Я пытаюсь использовать newtonsoft.json для десериализации строки json, возвращаемой из API White Pages Pro. Все работало идеально и десериализовалось безупречно, пока я не добрался до is_commercial. Все прошлое там, где я сталкиваюсь с проблемами. Ошибки, с которыми я сталкиваюсь, заключаются в следующем:
WhitePagesTool.jsonPersonComplex' does not contain a definition for 'Name' and no extension method 'Name' accepting a first argument of type 'WhitePagesTool.jsonPersonComplex' could be found (are you missing a using directive or an assembly reference?)
Также выдает ту же ошибку для всех следующих:
фамилия, имя, отчество, фамилия, age_range, пол, street_line_1, street_line_2, город, postal_code, state_code, код_страны, широту, долготу, точность, и associated_people
Это типичная строка Json, с которой я буду работать (измененная информация по очевидным причинам):
{ "id": "Phone.ID.Number", "phone_number": "5555555555", "is_valid": true, "country_calling_code": "1", "line_type": "Landline", "carrier": "Suddenlink Communications", "is_prepaid": false, "is_commercial": false, "belongs_to": [ { "id": "Person.ID.Number", "name": "John Json Doe", "firstname": "John", "middlename": "Json", "lastname": "Doe", "age_range": "30+", "gender": "Male", "type": "Person", "link_to_phone_start_date": "2018-01-01" } ], "current_addresses": [ { "id": "Location.ID.Number", "location_type": "Address", "street_line_1": "123 Annoying Street", "street_line_2": null, "city": "CSharp", "postal_code": "12345", "zip4": "1234", "state_code": "FL", "country_code": "US", "lat_long": { "latitude": 12.345678, "longitude": -12.345678, "accuracy": "RoofTop" }, "is_active": true, "delivery_point": "SingleUnit", "link_to_person_start_date": "2018-01-01" } ], "historical_addresses": [ ], "associated_people": [ { "id": "Person.ID.Number", "name": "Jane Doe", "firstname": "Jane", "middlename": null, "lastname": "Doe", "relation": "Household" }, { "id": "Person.ID.Number", "name": "John J Doe", "firstname": "John", "middlename": "J", "lastname": "Doe", "relation": "Household" }, { "id": "Person.ID.Number", "name": "John Json Doe", "firstname": "John", "middlename": "Json", "lastname": "Doe", "relation": "PotentialOwner" }, { "id": "Person.ID.Number", "name": "Jane J Doe", "firstname": "Jane", "middlename": "J", "lastname": "Doe", "relation": "PotentialOwner" }, { "id": "Person.ID.Number", "name": "Jane Json Doe", "firstname": "Jane", "middlename": "Json", "lastname": "Doe", "relation": "PotentialOwner" } ], "alternate_phones": [ ], "error": null, "warnings": [ ] }
Это мой класс десериализации
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; namespace WhitePagesTool { class jsonPersonComplex { public string id { get; set; } public string phone_number { get; set; } public bool is_valid { get; set; } public string line_type { get; set; } public string carrier { get; set; } public bool is_prepaid { get; set; } public bool is_commercial { get; set; } public List<BelongsTo> belongs_to { get; set; } public class BelongsTo { public string name { get; set; } public string firstname { get; set; } public string middlename { get; set; } public string lastname { get; set; } public string age_range { get; set; } public string gender { get; set; } public string type { get; set; } } public class CurrentAddress { public string street_line_1 { get; set; } public object street_line_2 { get; set; } public string city { get; set; } public string postal_code { get; set; } public string state_code { get; set; } public string country_code { get; set; } public LatLong lat_long { get; set; } } public class LatLong { public double latitude { get; set; } public double longitude { get; set; } public string accuracy { get; set; } } public class AssociatedPeople { public string name { get; set; } public string firstname { get; set; } public string middlename { get; set; } public string lastname { get; set; } public string relation { get; set; } } } }
Это весь мой код формы
using System; using Newtonsoft.Json; using System.Windows.Forms; namespace WhitePagesTool { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } #region UI events private void cmdDeserialize_Click(object sender, EventArgs e) { deserialiseJSON(txtInput.Text); } private void cmdClear_Click(object sender, EventArgs e) { txtDebugOutput.Text = string.Empty; } #endregion #region json functions private void deserialiseJSON(string strJSON) { try { //var jPerson = JsonConvert.DeserializeObject<dynamic>(strJSON); var jPerson = JsonConvert.DeserializeObject<jsonPersonComplex>(strJSON); //debugOutput("Here's Our JSON Object: " + jPerson.ToString()); debugOutput("Phone ID: " + jPerson.id.ToString()); debugOutput("Phone Number: " + jPerson.phone_number.ToString()); debugOutput("Valid Number: " + jPerson.is_valid); debugOutput("Line Type: " + jPerson.line_type); debugOutput("Carrier: " + jPerson.carrier); debugOutput("Prepaid: " + jPerson.is_prepaid); debugOutput("Commercial: " + jPerson.is_commercial); debugOutput("Name: " + jPerson.Name); debugOutput("First Name: " + jPerson.firstname); debugOutput("Middle Name: " + jPerson.middlename); debugOutput("Last Name: " + jPerson.lastname); debugOutput("Age Range: " + jPerson.age_range); debugOutput("Gender: " + jPerson.gender); debugOutput("Address: " + jPerson.street_line_1); debugOutput("Extended Address: " + jPerson.street_line_2); debugOutput("City: " + jPerson.city); debugOutput("Postal Code: " + jPerson.postal_code); debugOutput("State: " + jPerson.state_code); debugOutput("Country: " + jPerson.country_code); debugOutput("Latitude: " + jPerson.latitude); debugOutput("Longitude: " + jPerson.longitude); debugOutput("Accuracy: " + jPerson.accuracy); debugOutput("Associate Name: " + jPerson.associated_people.name); debugOutput("Associate First Name: " + jPerson.associated_people.firstname); debugOutput("Associate Middle Name: " + jPerson.associated_people.middlename); debugOutput("Associate Last Name: " + jPerson.associated_people.lastname); debugOutput("Associate Relationship: " + jPerson.associated_people.relationship); debugOutput("Associate Name: " + jPerson.associated_people.name); debugOutput("Associate First Name: " + jPerson.associated_people.firstname); debugOutput("Associate Middle Name: " + jPerson.associated_people.middlename); debugOutput("Associate Last Name: " + jPerson.associated_people.lastname); debugOutput("Associate Relationship: " + jPerson.associated_people.relationship); debugOutput("Associate Name: " + jPerson.associated_people.name); debugOutput("Associate First Name: " + jPerson.associated_people.firstname); debugOutput("Associate Middle Name: " + jPerson.associated_people.middlename); debugOutput("Associate Last Name: " + jPerson.associated_people.lastname); debugOutput("Associate Relationship: " + jPerson.associated_people.relationship); debugOutput("Associate Name: " + jPerson.associated_people.name); debugOutput("Associate First Name: " + jPerson.associated_people.firstname); debugOutput("Associate Middle Name: " + jPerson.associated_people.middlename); debugOutput("Associate Last Name: " + jPerson.associated_people.lastname); debugOutput("Associate Relationship: " + jPerson.associated_people.relationship); debugOutput("Associate Name: " + jPerson.associated_people.name); debugOutput("Associate First Name: " + jPerson.associated_people.firstname); debugOutput("Associate Middle Name: " + jPerson.associated_people.middlename); debugOutput("Associate Last Name: " + jPerson.associated_people.lastname); debugOutput("Associate Relationship: " + jPerson.associated_people.relationship); } catch(Exception ex) { debugOutput("We Had A Problem: " + ex.Message.ToString()); } } #endregion #region Debug Output private void debugOutput(string strDebugText) { try { System.Diagnostics.Debug.Write(strDebugText + Environment.NewLine); txtDebugOutput.Text = txtDebugOutput.Text + strDebugText + Environment.NewLine; txtDebugOutput.SelectionStart = txtDebugOutput.TextLength; txtDebugOutput.ScrollToCaret(); } catch(Exception ex) { System.Diagnostics.Debug.Write(ex.Message.ToString() + Environment.NewLine); } } #endregion } }
Что я уже пробовал:
Все, что я могу придумать. Я просмотрел бесчисленное количество часов видео, и все работает, пока я не пройду мимо одной части!