Json Deserialization | Cannot Deserialize Current Json

I have below Json -

{"property_id":"53863730","name":"Hayat Elhamra","address":{"line_1":"Jeddah","city":"Jeddah","state_province_name":"Jeddah","postal_code":"23212","country_code":"SA","obfuscation_required":false,"localized":{"links":{"ar-SA":{"method":"GET","href":"https://api.ean.com/2.4/properties/content?language=ar-SA&property_id=53863730&include=address"}}}},"location":{"coordinates":{"latitude":21.520902,"longitude":39.158265}},"phone":"20-01145772035","category":{"id":"16","name":"Apartment"},"rank":99999999,"business_model":{"expedia_collect":true,"property_collect":true},"dates":{"added":"2020-06-10T23:03:21.345Z","updated":"2020-06-10T23:03:23.701Z"},"chain":{"id":"0","name":"Independent"},"brand":{"id":"0","name":"Independent"}}
{"property_id":"53183065","name":"Carefully Furnished Bungalow With 2 Bathrooms, 7km From Pula","address":{"line_1":"1 x M 90,3","line_2":"PRIVATE_VACATION_HOME 3","city":"Fazana","state_province_name":"Istria (county)","postal_code":"52212","country_code":"HR","obfuscation_required":true,"localized":{"links":{"hr-HR":{"method":"GET","href":"https://api.ean.com/2.4/properties/content?language=hr-HR&property_id=53183065&include=address"}}}},"ratings":{"property":{"rating":"3.0","type":"Star"}},"location":{"coordinates":{"latitude":44.93,"longitude":13.8}},"phone":"410442743080","category":{"id":"17","name":"Private vacation home"},"rank":99999999,"business_model":{"expedia_collect":true,"property_collect":false},"dates":{"added":"2020-05-13T21:06:42.861Z","updated":"2020-05-18T21:57:39.242Z"},"statistics":{"1073743378":{"id":"1073743378","name":"Number of bedrooms - 2","value":"2"},"1073743380":{"id":"1073743380","name":"Max occupancy - 4","value":"4"},"1073743379":{"id":"1073743379","name":"Number of bathrooms - 2","value":"2"}},"chain":{"id":"7278","name":"Belvilla"},"brand":{"id":"7353","name":"Belvilla"}}
{"property_id":"53182898","name":"Snug Cottage in Pašman With Roofed Terrace","address":{"line_1":"Pasman","city":"Pasman","state_province_name":"Zadar","postal_code":"23260","country_code":"HR","obfuscation_required":true,"localized":{"links":{"hr-HR":{"method":"GET","href":"https://api.ean.com/2.4/properties/content?language=hr-HR&property_id=53182898&include=address"}}}},"ratings":{"property":{"rating":"1.0","type":"Star"}},"location":{"coordinates":{"latitude":43.891571,"longitude":15.423619}},"phone":"410442743080","category":{"id":"11","name":"Cottage"},"rank":99999999,"business_model":{"expedia_collect":true,"property_collect":false},"dates":{"added":"2020-05-13T21:13:49.155Z","updated":"2020-05-27T21:02:31.808Z"},"statistics":{"1073743378":{"id":"1073743378","name":"Number of bedrooms - 2","value":"2"},"1073743380":{"id":"1073743380","name":"Max occupancy - 5","value":"5"},"1073743379":{"id":"1073743379","name":"Number of bathrooms - 1","value":"1"}},"chain":{"id":"7278","name":"Belvilla"},"brand":{"id":"7353","name":"Belvilla"}}

For this I have created below class structure -

public class Property
{
  public string property_id { get; set; }
  public string name { get; set; }
  public Address address { get; set; }
  public Location location { get; set; }
  public string phone { get; set; }
  public Category category { get; set; }
  public int rank { get; set; }
  public Business_Model business_model { get; set; }
  public Dates dates { get; set; }
  public Chain chain { get; set; }
  public Brand brand { get; set; }
}

public class Address
{
  public string line_1 { get; set; }
  public string city { get; set; }
  public string state_province_name { get; set; }
  public string postal_code { get; set; }
  public string country_code { get; set; }
  public bool obfuscation_required { get; set; }
  public Localized localized { get; set; }
}

public class Localized
{
  public Links links { get; set; }
}

public class Links
{
  public ArSA arSA { get; set; }
}

public class ArSA
{
  public string method { get; set; }
  public string href { get; set; }
}

public class Location
{
  public Coordinates coordinates { get; set; }
}

public class Coordinates
{
  public float latitude { get; set; }
  public float longitude { get; set; }
}

public class Category
{
  public string id { get; set; }
  public string name { get; set; }
}

public class Business_Model
{
  public bool expedia_collect { get; set; }
  public bool property_collect { get; set; }
}

public class Dates
{
  public DateTime added { get; set; }
  public DateTime updated { get; set; }
}

public class Chain
{
  public string id { get; set; }
  public string name { get; set; }
}

public class Brand
{
  public string id { get; set; }
  public string name { get; set; }
}

I have below code where I am getting error -

using (StreamReader streamReader = new StreamReader("d://propertycontent.expediacollect.en-US.json"))
      {
        using (var json = new JsonTextReader(streamReader))
        {
          JsonSerializer serializer = new JsonSerializer();
          var properties= (List<Property>)serializer.Deserialize(json, typeof(List<Property>));       
        }       
      }

Error -

Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[Property]' 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 (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
Path 'property_id', line 1, position 15.'


Read more here: https://stackoverflow.com/questions/68462872/json-deserialization-cannot-deserialize-current-json

Content Attribution

This content was originally published by C Sharper at Recent Questions - Stack Overflow, and is syndicated here via their RSS feed. You can read the original post over there.

%d bloggers like this: