简体   繁体   中英

Deserealizing JSON object using Newtonsoft.Json

I have API endpoint, that returning my JSON Object

Here is it

 {
    "results": [
        {
            "id": 182,
            "title": "1-Day Private Beijing Tour to Tian'anmen Square, Forbidden City and Badaling Great Wall",
            "price": "162",
            "duration": "8",
            "duration_type": "1",
            "cover_image": {
                "id": 308,
                "img_path": "upload/images",
                "img_file": "6d637884086151b30fe12db52fbaf5eb.jpg",
                "status": "",
                "created_at": "2018-02-27 02:25:36",
                "updated_at": "2018-02-27 02:25:36",
                "destination_id": "182",
                "is_cover": "0",
                "url": "https://api.xplorpal.com/upload/images/300x300/6d637884086151b30fe12db52fbaf5eb.jpg"
            }
        },
        {
            "id": 183,
            "title": "One Day Private Beijing Tour to Mutianyu Great Wall and Summer Palace ",
            "price": "197",
            "duration": "8",
            "duration_type": "1",
            "cover_image": {
                "id": 305,
                "img_path": "upload/images",
                "img_file": "1f8a09ddffb80ef9232f3511893ae5c4.jpg",
                "status": "",
                "created_at": "2018-02-27 02:22:19",
                "updated_at": "2018-03-01 23:01:55",
                "destination_id": "183",
                "is_cover": "0",
                "url": "https://api.xplorpal.com/upload/images/300x300/1f8a09ddffb80ef9232f3511893ae5c4.jpg"
            }
        }
 ]
}

I need to deserialize it

So I wrote this model

    public class CoverImage
{
    public int id { get; set; }
    public string img_path { get; set; }
    public string img_file { get; set; }
    public string status { get; set; }
    public string created_at { get; set; }
    public string updated_at { get; set; }
    public string destination_id { get; set; }
    public string is_cover { get; set; }
    public string url { get; set; }
}

public class Result
{
    public int id { get; set; }
    public string title { get; set; }
    public string price { get; set; }
    public string duration { get; set; }
    public string duration_type { get; set; }
    public CoverImage cover_image { get; set; }
}

public class RootObject
{
    public List<Result> results { get; set; }
}

And trying to this like this

var responseExperiences = JsonConvert.DeserializeObject<IEnumerable<RootObject>>(content);

But when I run the project, I have this error:

Cannot deserialize the current JSON object (eg {"name":"value"}) into type 'System.Collections.Generic.IEnumerable`1[TravelApp.Models.GettingExperiences+Results]' because the type requires a JSON array (eg [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array (eg [1,2,3]) or change the deserialized type so that it is a normal .NET type (eg 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.

How I can fix this?

Your API returns an object with a single property named result , not a collection. You should deserialize into a RootObject object.

your JSON shows one object result corresponding to RootObject .

But you are trying to deserialize an array ( IEnumerable<> ) of RootObject

You should use this to deserialiaze the JSON showed :

JsonConvert.DeserializeObject<RootObject>(content);

您的api返回一个名为result的单个对象, 不是一个需要简单地像单个对象一样反序列化的集合。

var responseExperiences = JsonConvert.DeserializeObject<RootObject>(content);

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