Kiralyn
Kiralyn

Reputation: 55

I am trying to deserialize a JSON into a list of objects using .NET 3.1

I have the following Json:

{
   "Id":"2727",
   "Region":"US",
   "Data":[
      {
         "Title":"Director",
         "JobDescription":"Coordinates the department activity",
         "Department":"HR"
      },
      {
         "Title":"Programmer",
         "JobDescription":"Enterprise software developer",
         "Department":"FR"
      }
   ]
}

My format looks like this:

public class Data
{
    public string Title { get; set; }
    public string JobDescription { get; set; }
    public string Department { get; set; }
}

public class Format
{
    public string Id { get; set; }
    public string Region { get; set; }
    public List<Data> Data {get; set;}
}

I have tried to deserialize it like this:

var  objects = JsonConvert.DeserializeObject<IEnumerable<Format>>(File.ReadAllText("mockJson.json")).ToList();

I am getting this exception:

An unhandled exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.IEnumerable`1[JSONParsingExample.Format]' 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) 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 'GlobalOrgId', line 2, position 15.

Upvotes: 2

Views: 499

Answers (1)

pseudoabdul
pseudoabdul

Reputation: 636

Just posting this as an answer because I think its worth making it more visible. I assumed the method call was going to have some issues with nesting lists inside a json, but I'm pleased to see it works.

Format format = JsonConvert.DeserializeObject<Format>(File.ReadAllText("mockJson.json"));

I inspected the elements and they all seem to be where they are supposed to be.

Just be careful because JsonConvert.DeserializeObject<T> returns an object of type T, not IEnumerable<T>.

When working with JSON in .NET I'd recommend moving over to the new built in stuff.

https://devblogs.microsoft.com/dotnet/net-core-image-processing/

Upvotes: 1

Related Questions