C# JSON. net DeserializeObject <Class>заполняет a нулевым значением - PullRequest
0 голосов
/ 05 мая 2020

Возникли проблемы с десериализацией JSON в JSON. net.

Прежде всего я беру JSON из моего источника, который выглядит следующим образом.

{
"guest": {
    "id": 11111,        
    "A": "bla",
    "B": "bla",
    "C": false,
    "credentials": [
        {
            "id": 222,
            "Z": "bla",
            "accounts": [
                {
                    "id": 01,
                    "type": "bla"
                }
            ]
        },
        {
            "id": 222,
            "Z": "bla",
            "accounts": [
                {
                    "id": 02,
                    "type": "bla"
                }
            ]
        },
        {
            "id": 333,
            "Z": "bla",
            "accounts": [
                {
                    "id": 03,
                    "type": "bla"
                },
                {
                    "id": 04,
                    "type": "bla"
                },
                {
                    "id": 05,
                    "type": "bla"
                },
            ]
        },          
    ]
}

}

В моем коде у меня есть следующие классы

  public class guest
{
    public int id { get; set; }

    public string A { get; set; }

    public string B { get; set; }

    public bool C { get; set; }

    public IList<credentials> credentials { get; set; }

}

  public class credentials
{
    public int id { get; set; }

    public string Z { get; set; }

    public IList<accounts> accounts { get; set; }
}


 public class accounts
{
    public int id { get; set; }

    public string type { get; set; }
}       

С этого момента я получаю свой JSON из HttpWebResponse и десериализую.

var httpResponseGetResponse = (HttpWebResponse)httpWebRequestGetResponse.GetResponse();
        using (var streamReader = new StreamReader(httpResponseGetResponse.GetResponseStream(), Encoding.UTF8))
        {
            var result =  streamReader.ReadToEnd();
            guest deseriazedJSON = JsonConvert.DeserializeObject<guest>(result);
        }

На этом все заканчивается NULL. Я слепой и что-то упустил в документах JSON. net?

Благодарю за любую помощь и заранее благодарю вас.

1 Ответ

0 голосов
/ 05 мая 2020

У вас есть объект с единственным свойством с именем guest на уровне root вашего JSON. Таким образом, его можно десериализовать в следующем сценарии:

public class Response 
{
    public guest guest { get; set; }
}

...

var httpResponseGetResponse = (HttpWebResponse)httpWebRequestGetResponse.GetResponse();
using (var streamReader = new StreamReader(httpResponseGetResponse.GetResponseStream(), Encoding.UTF8))
{
    var result =  streamReader.ReadToEnd();
    var deseriazedJSON = JsonConvert.DeserializeObject<Response>(result);
}

Лучше изменить ввод JSON, чтобы избежать лишней оболочки:

{
    "id": 11111,        
    "A": "bla",
    "B": "bla",
    "C": false,
    "credentials": [
        {
            "id": 222,
            "Z": "bla"
            "accounts": [
                {
                    "id": 01,
                    "type": "bla"
                }
            ]
        },
        {
            "id": 222,
            "Z": "bla"
            "accounts": [
                {
                    "id": 02,
                    "type": "bla"
                }
            ]
        },
        {
            "id": 333,
            "Z": "bla"
            "accounts": [
                {
                    "id": 03,
                    "type": "bla"
                },
                {
                    "id": 04,
                    "type": "bla"
                },
                {
                    "id": 05,
                    "type": "bla"
                },
            ]
        },          
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...