Member 11874411 Ответов: 2

Как десериализовать данные json в C#


Я получаю ответ в следующем формате.
strTokenNumber
={"код":200,"сообщение":"авторизовано","данные":{"токен":1545207965545}}
Я получаю excpetion
Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[POSInvoiceDetailsIntegration.TokenResult]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.

в следующем заявлении:
var userauthenticate = JsonConvert.DeserializeObject<UserAuthenticate>(strTokenNumber);


Что я уже пробовал:

 public class TokenResult
    {
       //[JsonProperty("TokenResult")]
       public string token { get; set; }
    }
public class UserAuthenticate   
    {
        //TokenResult token = new TokenResult();
        public string code { get; set; }
        public string message { get; set; }

        //public Array data { get; set; }
        //public List<string> data { get; set; }
        public List<TokenResult> data { get; set; }
    }

2 Ответов

Рейтинг:
12

F-ES Sitecore

В json у вас есть "данные" - это один объект, а не массив\список, поэтому измените свое определение класса;

public class UserAuthenticate   
    {
        public string code { get; set; }
        public string message { get; set; }

        public TokenResult data { get; set; }
    }


Member 11874411

это решило мою проблему.

Рейтинг:
1

OriginalGriff

JSON, который вы показываете, не соответствует вашим классам - элемент "данные" - это не коллекция, а единственный экземпляр.
Если я возьму ваш JSON и скормлю его генератору классов: json2csharp - генерация классов c# из json[^] Я получаю это:

public class Data
{
    public long token { get; set; }
}

public class RootObject
{
    public int code { get; set; }
    public string message { get; set; }
    public Data data { get; set; }
}

Если я скормлю вашим классам некоторые данные, я получу то, что ожидаю:
UserAuthenticate ua = new UserAuthenticate();
ua.code = "200";
ua.message = "Authorized";
ua.data = new List<TokenResult>();
ua.data.Add(new TokenResult() { token = "1545207965545" });
string json = Newtonsoft.Json.JsonConvert.SerializeObject(ua);
{"code":"200","message":"Authorized","data":[{"token":"1545207965545"}]}
Я бы начал с проверки вашего источника данных.