Я выполняю серверный запрос 3 разных пользователей из игры.

В результате я получил эту строку JSON:

{
   "d4r1o": {
      "id": 1040806,
      "name": "D4R1O",
      "profileIconId": 596,
      "revisionDate": 1399366400000,
      "summonerLevel": 30
   },
   "snnovox": {
      "id": 65728,
      "name": "SN Novox",
      "profileIconId": 548,
      "revisionDate": 1399369344000,
      "summonerLevel": 30
   },
   "gmbecken": {
      "id": 421545,
      "name": "GM Becken",
      "profileIconId": 26,
      "revisionDate": 1399160360000,
      "summonerLevel": 30
   }
}

Итак, чтобы десериализовать эту строку, у меня есть эти классы

public class RootObject
{
    public SummonerDto d4r1o { get; set; }
    public SummonerDto snnovox { get; set; }
    public SummonerDto gmbecken { get; set; }
}

public class SummonerDto
{
    public int id { get; set; }
    public string name { get; set; }
    public int profileIconId { get; set; }
    public long revisionDate { get; set; }
    public int summonerLevel { get; set; }
}

Это работает нормально, но что, если пользователь хочет сделать запрос о своем имени пользователя, например: snyucax

    {"snyucax": {
   "id": 48985,
   "name": "SN YucaX",
   "profileIconId": 504,
   "revisionDate": 1399257043000,
   "summonerLevel": 30
}}

Есть ли способ создать только один объект в классе RootObject , который позволил бы мне использовать любое имя пользователя без необходимости указывать это имя в качестве объекта?

0
iMaximuz 7 Май 2014 в 02:38

3 ответа

Лучший ответ

Вы должны использовать для этого словарь. Если вы используете JSON.NET, код будет выглядеть так:

var users = JsonConvert.DeserializeObject<Dictionary<string, SummonerDto>>(jsonDataString);

Тогда вы можете получить пользователя, выполнив:

var user = users["d4r1o"];

e: Кажется, Tim S просто опередил меня, ха-ха.

0
Alexander Forbes-Reed 6 Май 2014 в 22:44

Похоже, ваши данные лучше смоделировать в виде словаря. Использовать

JsonConvert.DeserializeObject<Dictionary<string, SummonerDto>>(myJson)
1
Tim S. 6 Май 2014 в 22:42

Я думаю, что вам не следует жестко закреплять свои объекты. Вместо этого используйте словарь или отправьте имя пользователя и сформируйте объект json на основе пользователя и десериализуйте его в браузере клиента o app

0
lumee 6 Май 2014 в 22:44