#c# #.net
#c# #.net
Вопрос:
Я получаю нули, десериализующие объект. Попытался удалить это ключевое слово List, но затем я получаю нули. Ошибка-
Cannot deserialize the current JSON object
`
Может быть, у вас есть какие-нибудь идеи, как это исправить. 🙂
Код:
client.BaseAddress = new Uri("https://euw1.api.riotgames.com/lol/match/v4/matchlists/by-account/");
string s = client.GetStringAsync("SRAUZPYTqglRgTjMEzaqY1s-wFMaNZnCjgBHMqQNDnJeJNw?endIndex=10amp;api_key=RGAPI-7bc6b22c-3ce3-41e6-bfbd-90b1eccb212f").Resu<
var rankInfoList = JsonConvert.DeserializeObject<List<MatchInfo>>(s);
Модель:
public class MatchInfo
{
public string gameId { get; set; }
public string champion { get; set; }
}
Json:
{
"matches": [
{
"platformId": "EUW1",
"gameId": 4961339963,
"champion": 1,
"queue": 420,
"season": 13,
"timestamp": 1607031715226,
"role": "SOLO",
"lane": "MID"
},
{
"platformId": "EUW1",
"gameId": 4961185949,
"champion": 238,
"queue": 420,
"season": 13,
"timestamp": 1607026682284,
"role": "SOLO",
"lane": "MID"
}
],
"startIndex": 0,
"endIndex": 2,
"totalGames": 120
}
Ответ №1:
Вам нужно создать RootObject, который будет иметь matches
свойство. тогда совпадения будут представлять собой список объектов ( MatchInfo
)
Ваш RootObject будет выглядеть следующим образом,
public class RootObject
{
public List<MatchInfo> matches { get; set; }
public int startIndex { get; set; }
public int endIndex { get; set; }
public int totalGames { get; set; }
}
public class MatchInfo
{
public string platformId { get; set; }
public long gameId { get; set; }
public int champion { get; set; }
public int queue { get; set; }
public int season { get; set; }
public long timestamp { get; set; }
public string role { get; set; }
public string lane { get; set; }
}
Затем вы выполните десериализацию, используя следующий оператор
var rankInfoList = JsonConvert.DeserializeObject<RootObject>(s);
Ответ №2:
Потому что JSON не соответствует модели. Модель, в которую вы пытаетесь ее десериализовать, является a List<MatchInfo>
, но JSON — это не список, это объект со свойством, которое содержит список. Создайте содержащую модель:
public class MatchInfos
{
public List<MatchInfo> matches { get; set; }
}
И десериализуйте в это:
var rankInfoList = JsonConvert.DeserializeObject<MatchInfos>(s);
Ответ №3:
matches — это коллекция (MatchInfo), но вы обрабатываете корень как коллекцию. Вместо этого попробуйте сделать это так:
void Main()
{
string json = @"{
""matches"": [
{
""platformId"": ""EUW1"",
""gameId"": 4961339963,
""champion"": 1,
""queue"": 420,
""season"": 13,
""timestamp"": 1607031715226,
""role"": ""SOLO"",
""lane"": ""MID""
},
{
""platformId"": ""EUW1"",
""gameId"": 4961185949,
""champion"": 238,
""queue"": 420,
""season"": 13,
""timestamp"": 1607026682284,
""role"": ""SOLO"",
""lane"": ""MID""
}
],
""startIndex"": 0,
""endIndex"": 2,
""totalGames"": 120
}";
var data = JsonConvert.DeserializeAnonymousType(json, new { matches = new[] { new MatchInfo {}}});
// data.matches is your MatchInfo list.
}
public class MatchInfo
{
public string gameId { get; set; }
public string champion { get; set; }
}