简体   繁体   中英

Json is not deserializing correctly into a class

I'm trying to convert an array into a class. So I get the array, then serialize it with JsonConvert as you can see below:

var gameResponse = GetGame(Id);
var returnedArray = gameResponse.Result.Results;
var json = JsonConvert.SerializeObject(returnedArray);
var result = JsonConvert.DeserializeObject<T>(json);

I can see the results of this in Visual Studio debug mode and "json" looks like this:

[
  { 
    \"CreatorId\":\"41c5321e-6f37-4d4f-92f7-fc381be0fc62\",
    \"GameId\": \"3938\",
    \"Type\": \"2\",
    \"CreateDate\": \"1/2/2017\",
    \"TeamId\": \"2394\",
    \"LeaderId\": \"34922\",
    \"CountryCode\": \"23\",
    \"SalesRank\": \"4\",
    \"Title\": \"Space Shooter Max\",
    \"TeamName\": \"The One\",
    \"TeamMembers\" : \"4\"
  }
]

However, when the code hits the next line:

var result = JsonConvert.DeserializeObject<T>(json);  // In this case, <T> is <Game>

I get this error:

JsonSerializationException: Cannot deserialize the current JSON array (eg [1,2,3]) into type 'GameLabs.Game' because the type requires a JSON object (eg {"name":"value"}) to deserialize correctly.

GameLabs.Game is a class that looks like this:

public sealed class Game
{
    public string CreatorId { get; set; }
    public string GameId { get; set; }
    public string Title { get; set; }
    public DateTime CreateDate { get; set; }
    public string CountryCode { get; set; }
}

I'm not sure why it won't accept the JSON.

Does anyone see anything wrong?

Thanks!

If you examine your JSON, it is not an a single object, but instead a collection. "[..]" signifies a collection.

For example,

[ "Ford", "BMW", "Fiat" ] 

The above Json implies a array of string with 3 elements. This is similar to your Json as well.

Hence you need to deserialize your Json to a Collection as well.

var result = JsonConvert.DeserializeObject<List<T>>(str);

You can read more on Json Arrays here

As I can see, your JSON is array and you should write somethink like this:

var result = JsonConvert.DeserializeObject<T[]>(json);

T=>T[]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM