Click here to Skip to main content
15,067,251 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
I appologize in advance as this is probably an easy fix, and going to be overly annoying for all who read it. However thanks in advance for ANY and ALL help given! I haven't coded in years, however recent events require me to pick back up again. I've never coded in anything except VB6, so this is all a learning process to me. I'm trying to use newtonsoft.json to deserialize a json string returned from White Pages Pro api. Everything worked perfectly and deserialized flawlessly UNTIL i got to is_commercial. Everything past there is where I run into issues with. The errors I'm encountering are as follows:

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?)


Also throws the same error for all the following:
firstname, middlename, lastname, age_range, gender, street_line_1, street_line_2, city, postal_code, state_code, country_code, latitude, longitude, accuracy, and associated_people

This is the typical Json string I'll be working with (changed info for obvious reasons):
{
  "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": [

  ]
}


This is my Deserialize Class

C#
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; }
        }

    }

}


This is my entire Form code

C#
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

    }
}


What I have tried:

Everything I Can think of. I've watched countless hours of videos, and everything works, UNTIL I get past the one part!
Posted
Updated 13-Jan-18 11:54am

Your code is:
C#
debugOutput("Name:  " + jPerson.Name);
But your property definition is:
C#
public string name { get; set; }
So that's name rather than Name: C# identifiers are case-sensitive.
   
This article goes into detail on how to Deserialize JSON and the tools that you can use to help you: Working with JSON in C# & VB[^]

Here is the code generated by JSON Utils: Generate C#, VB.Net, SQL Table, Java and PHP from JSON[^]:
C#
namespace WhitePagesTool
{
        public class BelongsTo
        {
            [JsonProperty("id")]
            public string Id { getset; }

            [JsonProperty("name")]
            public string Name { getset; }

            [JsonProperty("firstname")]
            public string Firstname { getset; }

            [JsonProperty("middlename")]
            public string Middlename { getset; }

            [JsonProperty("lastname")]
            public string Lastname { getset; }

            [JsonProperty("age_range")]
            public string AgeRange { getset; }

            [JsonProperty("gender")]
            public string Gender { getset; }

            [JsonProperty("type")]
            public string Type { getset; }

            [JsonProperty("link_to_phone_start_date")]
            public string LinkToPhoneStartDate { getset; }
        }

        public class LatLong
        {
            [JsonProperty("latitude")]
            public double Latitude { getset; }

            [JsonProperty("longitude")]
            public double Longitude { getset; }

            [JsonProperty("accuracy")]
            public string Accuracy { getset; }
        }

        public class CurrentAddress
        {
            [JsonProperty("id")]
            public string Id { getset; }

            [JsonProperty("location_type")]
            public string LocationType { getset; }

            [JsonProperty("street_line_1")]
            public string StreetLine1 { getset; }

            [JsonProperty("street_line_2")]
            public object StreetLine2 { getset; }

            [JsonProperty("city")]
            public string City { getset; }

            [JsonProperty("postal_code")]
            public string PostalCode { getset; }

            [JsonProperty("zip4")]
            public string Zip4 { getset; }

            [JsonProperty("state_code")]
            public string StateCode { getset; }

            [JsonProperty("country_code")]
            public string CountryCode { getset; }

            [JsonProperty("lat_long")]
            public LatLong LatLong { getset; }

            [JsonProperty("is_active")]
            public bool IsActive { getset; }

            [JsonProperty("delivery_point")]
            public string DeliveryPoint { getset; }

            [JsonProperty("link_to_person_start_date")]
            public string LinkToPersonStartDate { getset; }
        }

        public class AssociatedPeople
        {
            [JsonProperty("id")]
            public string Id { getset; }

            [JsonProperty("name")]
            public string Name { getset; }

            [JsonProperty("firstname")]
            public string Firstname { getset; }

            [JsonProperty("middlename")]
            public string Middlename { getset; }

            [JsonProperty("lastname")]
            public string Lastname { getset; }

            [JsonProperty("relation")]
            public string Relation { getset; }
        }

        public class jsonPersonComplex
        {
            [JsonProperty("id")]
            public string Id { getset; }

            [JsonProperty("phone_number")]
            public string PhoneNumber { getset; }

            [JsonProperty("is_valid")]
            public bool IsValid { getset; }

            [JsonProperty("country_calling_code")]
            public string CountryCallingCode { getset; }

            [JsonProperty("line_type")]
            public string LineType { getset; }

            [JsonProperty("carrier")]
            public string Carrier { getset; }

            [JsonProperty("is_prepaid")]
            public bool IsPrepaid { getset; }

            [JsonProperty("is_commercial")]
            public bool IsCommercial { getset; }

            [JsonProperty("belongs_to")]
            public IList<BelongsTo> BelongsTo { getset; }

            [JsonProperty("current_addresses")]
            public IList<CurrentAddress> CurrentAddresses { getset; }

            [JsonProperty("historical_addresses")]
            public IList<object> HistoricalAddresses { getset; }

            [JsonProperty("associated_people")]
            public IList<AssociatedPeople> AssociatedPeople { getset; }

            [JsonProperty("alternate_phones")]
            public IList<object> AlternatePhones { getset; }

            [JsonProperty("error")]
            public object Error { getset; }

            [JsonProperty("warnings")]
            public IList<object> Warnings { getset; }
        }
}

The code generated maps the JSON property names to CamelCase C# properties. This should help reduce the confusion in your code.

UPDATE: Added support for nullable types.
C#
namespace WhitePagesTool
{
	public class BelongsTo
	{
		[JsonProperty("id")]
		public string Id { get; set; }

		[JsonProperty("name")]
		public string Name { get; set; }

		[JsonProperty("firstname")]
		public string Firstname { get; set; }

		[JsonProperty("middlename")]
		public string Middlename { get; set; }

		[JsonProperty("lastname")]
		public string Lastname { get; set; }

		[JsonProperty("age_range")]
		public string AgeRange { get; set; }

		[JsonProperty("gender")]
		public string Gender { get; set; }

		[JsonProperty("type")]
		public string Type { get; set; }

		[JsonProperty("link_to_phone_start_date")]
		public string LinkToPhoneStartDate { get; set; }
	}

	public class LatLong
	{
		[JsonProperty("latitude")]
		public double? Latitude { get; set; }

		[JsonProperty("longitude")]
		public double? Longitude { get; set; }

		[JsonProperty("accuracy")]
		public string Accuracy { get; set; }
	}

	public class CurrentAddress
	{
		[JsonProperty("id")]
		public string Id { get; set; }

		[JsonProperty("location_type")]
		public string LocationType { get; set; }

		[JsonProperty("street_line_1")]
		public string StreetLine1 { get; set; }

		[JsonProperty("street_line_2")]
		public string StreetLine2 { get; set; }

		[JsonProperty("city")]
		public string City { get; set; }

		[JsonProperty("postal_code")]
		public string PostalCode { get; set; }

		[JsonProperty("zip4")]
		public string Zip4 { get; set; }

		[JsonProperty("state_code")]
		public string StateCode { get; set; }

		[JsonProperty("country_code")]
		public string CountryCode { get; set; }

		[JsonProperty("lat_long")]
		public LatLong LatLong { get; set; }

		[JsonProperty("is_active")]
		public bool? IsActive { get; set; }

		[JsonProperty("delivery_point")]
		public string DeliveryPoint { get; set; }

		[JsonProperty("link_to_person_start_date")]
		public string LinkToPersonStartDate { get; set; }
	}

	public class AssociatedPeople
	{
		[JsonProperty("id")]
		public string Id { get; set; }

		[JsonProperty("name")]
		public string Name { get; set; }

		[JsonProperty("firstname")]
		public string Firstname { get; set; }

		[JsonProperty("middlename")]
		public string Middlename { get; set; }

		[JsonProperty("lastname")]
		public string Lastname { get; set; }

		[JsonProperty("relation")]
		public string Relation { get; set; }
	}

	public class jsonPersonComplex
	{
		[JsonProperty("id")]
		public string Id { get; set; }

		[JsonProperty("phone_number")]
		public string PhoneNumber { get; set; }

		[JsonProperty("is_valid")]
		public bool? IsValid { get; set; }

		[JsonProperty("country_calling_code")]
		public string CountryCallingCode { get; set; }

		[JsonProperty("line_type")]
		public string LineType { get; set; }

		[JsonProperty("carrier")]
		public string Carrier { get; set; }

		[JsonProperty("is_prepaid")]
		public bool? IsPrepaid { get; set; }

		[JsonProperty("is_commercial")]
		public bool? IsCommercial { get; set; }

		[JsonProperty("belongs_to")]
		public IList<BelongsTo> BelongsTo { get; set; }

		[JsonProperty("current_addresses")]
		public IList<CurrentAddress> CurrentAddresses { get; set; }

		//[JsonProperty("historical_addresses")]
		//public IList<object> HistoricalAddresses { get; set; }

		[JsonProperty("associated_people")]
		public IList<AssociatedPeople> AssociatedPeople { get; set; }

		//[JsonProperty("alternate_phones")]
		//public IList<object> AlternatePhones { get; set; }

		//[JsonProperty("error")]
		//public object Error { get; set; }

		//[JsonProperty("warnings")]
		//public IList<object> Warnings { get; set; }
	}
}

NOTE: There are some properties where no JSON data was provided. I have commented these out to prevent errors. You will need to add them yourself.
   
v2
Comments
Karthik_Mahalingam 13-Jan-18 21:36pm
   
5
Graeme_Grant 13-Jan-18 21:59pm
   
Thanks! :)
Member 13621621 19-Jan-18 1:31am
   
This is still throwing an error with any value that returns "null"
Graeme_Grant 19-Jan-18 3:35am
   
Please have a look at the update to support nullable types.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900