scripter78
scripter78

Reputation: 1177

JSon.Net Json to entity

I have an entity, I setup the entity with the database you see below as an edmx file. I also have a JSon file that I am pulling from edmunds.com I am using JSon.net and trying to parse the JSon object into the Entity and save the values of the Json to the Entity.

Every option I try to use it seems to blow up on me. Can anyone please provide me a decent example of how to accomplish this as it is driving me insane at this point.

{
   "dealerHolder":[
      {
         "id":"31711",
         "locationId":"3730",
         "address":{
            "street":"24825 US Hwy 19 N",
            "apartment":"",
            "city":"Clearwater",
            "stateCode":"FL",
            "stateName":"Florida",
            "county":"Pinellas",
            "country":"USA",
            "zipcode":"33763",
            "latitude":27.99785,
            "longitude":-82.729321
         },
         "name":"Countryside Ford of Clearwater",
         "logicalName":"CountrysideFordofClearwater",
         "type":"ROOFTOP",
         "make":"Ford",
         "operations":{
            "Wednesday":"8:30 AM-9:00 PM",
            "Tuesday":"8:30 AM-9:00 PM",
            "Thursday":"8:30 AM-9:00 PM",
            "Saturday":"8:30 AM-8:00 PM",
            "Friday":"8:30 AM-9:00 PM",
            "Monday":"8:30 AM-9:00 PM",
            "Sunday":"11:00 AM-5:00 PM"
         },
         "contactinfo":{
            "dealer_website":"http://www.clearwaterford.com/",
            "email_address":"",
            "phone":""
         },
         "publishDate":"2012-05-21",
         "active":true,
         "syncPublishDate":"2012-05-21"
      },
      {
         "id":"31673",
         "locationId":"3708",
         "address":{
            "street":"2525 34th St N",
            "apartment":"",
            "city":"Saint Petersburg",
            "stateCode":"FL",
            "stateName":"Florida",
            "county":"Pinellas",
            "country":"USA",
            "zipcode":"33713",
            "latitude":27.794484,
            "longitude":-82.679411
         },
         "name":"Autoway Ford of St Petersburg",
         "logicalName":"AutowayFordofStPetersburg",
         "type":"ROOFTOP",
         "make":"Ford",
         "operations":{
            "Wednesday":"08:30 AM-08:00 PM",
            "Tuesday":"08:30 AM-08:00 PM",
            "Thursday":"08:30 AM-08:00 PM",
            "Saturday":"09:00 AM-06:00 PM",
            "Friday":"08:30 AM-08:00 PM",
            "Monday":"08:30 AM-08:00 PM",
            "Sunday":"12:00 PM-05:00 PM"
         },
         "contactinfo":{
            "dealer_website":"http://www.autowayford.net/",
            "email_address":"",
            "phone":""
         },
         "publishDate":"2012-05-21",
         "active":true,
         "syncPublishDate":"2012-05-21"
      },
      {
         "id":"31636",
         "locationId":"3684",
         "address":{
            "street":"5815 N Dale Mabry Hwy",
            "apartment":"",
            "city":"Tampa",
            "stateCode":"FL",
            "stateName":"Florida",
            "county":"Hillsborough",
            "country":"USA",
            "zipcode":"33614",
            "latitude":28.00016,
            "longitude":-82.505206
         },
         "name":"Bill Currie Ford",
         "logicalName":"BillCurrieFord",
         "type":"ROOFTOP",
         "make":"Ford",
         "operations":{
            "Wednesday":"8:00 AM-9:00 PM",
            "Tuesday":"8:00 AM-9:00 PM",
            "Thursday":"8:00 AM-9:00 PM",
            "Saturday":"8:00 AM-8:00 PM",
            "Friday":"8:00 AM-9:00 PM",
            "Monday":"8:00 AM-9:00 PM",
            "Sunday":"11:00 AM-6:00 PM"
         },
         "contactinfo":{
            "dealer_website":"http://billcurriedirect.dealerconnection.com/",
            "email_address":"",
            "phone_areacode":"888",
            "phone_postfix":"1156",
            "phone_prefix":"255",
            "phone":"8882551156"
         },
         "publishDate":"2012-05-21",
         "active":true,
         "syncPublishDate":"2012-05-21"
      },
      {
         "id":"31723",
         "locationId":"3739",
         "address":{
            "street":"17556 US 19 N",
            "apartment":"",
            "city":"Clearwater",
            "stateCode":"FL",
            "stateName":"Florida",
            "county":"Pinellas",
            "country":"USA",
            "zipcode":"33764",
            "latitude":27.93164,
            "longitude":-82.730647
         },
         "name":"Walker Ford",
         "logicalName":"WalkerFord",
         "type":"ROOFTOP",
         "make":"Ford",
         "operations":{
            "Wednesday":"8:30 AM-8:00 PM",
            "Tuesday":"8:30 AM-8:00 PM",
            "Thursday":"8:30 AM-8:00 PM",
            "Saturday":"8:30 AM-6:00 PM",
            "Friday":"8:30 AM-8:00 PM",
            "Monday":"8:30 AM-8:00 PM",
            "Sunday":"11:30 AM-6:00 PM"
         },
         "contactinfo":{
            "dealer_website":"http://www.walkerford.com/",
            "email_address":"",
            "phone_areacode":"727",
            "phone_postfix":"3673",
            "phone_prefix":"535",
            "phone":"7275353673"
         },
         "publishDate":"2012-05-21",
         "active":true,
         "syncPublishDate":"2012-05-21"
      }
   ]
}

http://blog.redeyeproject.com/databasediagram.png

Here is the most recent Error I get Cannot deserialize JSON object (i.e. {"name":"value"}) into type 'System.Data.Objects.DataClasses.EntityCollection`1[DealerTentSaleMVC.Models.Operation]'. The deserialized type should be a normal .NET type (i.e. not a primitive type like integer, not a collection type like an array or List) or a dictionary type (i.e. Dictionary). To force JSON objects to deserialize add the JsonObjectAttribute to the type. Path 'operations.Wednesday', line 22, position 19.

that error is happening with this code.

            WebClient wc = new WebClient();
        string stws = wc.DownloadString(url);

        JToken root = JObject.Parse(stws);
        JToken dealerholder = root["dealerHolder"];
        DealerHolder convertedProducts = new DealerHolder();
        string dh = dealerholder.ToString().Replace("[", "").Replace("]", "");
        JsonConvert.PopulateObject(dh, convertedProducts, new JsonSerializerSettings 
                                                            { 
                                                                NullValueHandling = NullValueHandling.Ignore

                                                            });

specifically it is happening on the last line there

Upvotes: 0

Views: 3223

Answers (1)

Darin Dimitrov
Darin Dimitrov

Reputation: 1038780

You could build an object structure that reflects the JSON that you are trying to deserialize:

public class Result
{
    public DealerHolder[] DealerHolder { get; set; }
}

public class DealerHolder
{
    public string Id { get; set; }
    public string LocationId { get; set; }
    public Address Address { get; set; }
    public string Name { get; set; }
    public string LogicalName { get; set; }
    public string Type { get; set; }
    public string Make { get; set; }
    public Operations Operations { get; set; }
    public Contact Contactinfo { get; set; }
    public string PublishDate { get; set; }
    public bool Active { get; set; }
    public string SyncPublishDate { get; set; }
}

public class Address
{
    public string Street { get; set; }
    public string Apartment { get; set; }
    public string City { get; set; }
    public string StateCode { get; set; }
    public string StateName { get; set; }
    public string County { get; set; }
    public string Country { get; set; }
    public string ZipCode { get; set; }
    public double Latitude { get; set; }
    public double Longitude { get; set; }
}

public class Operations
{
    public string Wednesday { get; set; }
    public string Tuesday { get; set; }
    public string Thursday { get; set; }
    public string Saturday { get; set; }
    public string Friday { get; set; }
    public string Monday { get; set; }
    public string Sunday { get; set; }
}

public class Contact
{
    public string Dealer_website { get; set; }
    public string Email_address { get; set; }
    public string Phone { get; set; }
}

and then:

string json = .... go and fetch the JSON
Result result = JsonConvert.DeserializeObject<Result>(json);
// do something with the result, like for example enumerating over the 
// dealer holders collection

Upvotes: 1

Related Questions