Невозможно десериализовать текущий объект JSON в C # - PullRequest
0 голосов
/ 14 ноября 2018

Здравствуйте, я пытался десереализовать этот ответ json, а затем перебрать объекты, чтобы сохранить их в своей базе данных, но постоянно получаю эту ошибку.Вот мои классы

public class Details
{
    public string ConID { get; set; }
    public string Name { get; set; }
    public string LA { get; set; }
    public string Sector { get; set; }
    public string Category { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }
    public string Address { get; set; }
    public object ContactPerson { get; set; }
    public object ContactPhone { get; set; }
    public object ContactEmail { get; set; }
    public object BcNumber { get; set; }
    public string CID { get; set; }
}

public class Notice
{
    public string NoticeID { get; set; }
}

public class RootObject
{
    public List<Details> details { get; set; }
    public List<Notice> Notice { get; set; }
    public string ResponseCode { get; set; }
    public string ResponseMessage { get; set; }
}

// Вот ответ Json

[
    {
        "details": {
            "ConID": "1427093",
            "Name": "David Mark",
            "LA": "LAGOS",
            "Sector": "SERVICES",
            "Category": "LARGE",
            "Email": "",
            "Phone": "",
            "Address": "VI LAGOS",
            "ContactPerson": null,
            "ContactPhone": null,
            "ContactEmail": null,
            "BcNumber": null,
            "CID": "11111111111"
        },
        "Notice": {
            "NoticeID": "null"
        },
        "ResponseCode": "00",
        "ResponseMessage": "Successfull"
    },
 {
        "details": {
            "ConID": "1427093",
            "Name": "Samuel King",
            "LA": "NAIROBI",
            "Sector": "SERVICES",
            "Category": "SMALL",
            "Email": "",
            "Phone": "",
            "Address": "VI LAGOS",
            "ContactPerson": null,
            "ContactPhone": null,
            "ContactEmail": null,
            "BcNumber": null,
            "CID": "11112112121"
        },
        "Notice": {
            "NoticeID": "null"
        },
        "ResponseCode": "00",
        "ResponseMessage": "Successfull"
    }]

Вот часть, которую я пытался десериализовать json

HttpClient webClient = new HttpClient();
Uri uri = new Uri("http://xxxxx");
HttpResponseMessage response = webClient.GetAsync(uri).Result;
if (response.IsSuccessStatusCode)
{
    var JSON = response.Content.ReadAsStringAsync().Result;
    var _Data = JsonConvert.DeserializeObject<RootObject>(JSON);
}

Как сделатья отменяю ответ json, чтобы соответствовать моему классу

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

У вас есть две проблемы.

Во-первых, ваши классы не совсем точно представляют ваш Json.

В вашем RootObject классе есть два свойства задачи:

public List<Details> details { get; set; }
public List<Notice> Notice { get; set; }

Ваш json показывает их какодин объект, а не массив объектов.Вместо этого ваш код должен быть:

public Details details { get; set; }
public Notice Notice { get; set; }

Вторая проблема - ваш код десериализации.Ваш json - это список объектов, а не один.Итак, ваш код должен быть:

List<RootObject> _Data = JsonConvert.DeserializeObject<List<RootObject>>(JSON); 

Рабочая скрипка здесь

0 голосов
/ 14 ноября 2018

Как подсказывает @maccettura, вам, возможно, придется сделать что-то вроде этого:

var _Data = JsonConvert.DeserializeObject<List<RootObject>>(JSON);

Это потому, что вы хотите десериализовать список корневых объектов, а не один объект.

...