1

Я пытаюсь десериализовать ДостиженияКонфигурации: список ОТДЫХ Ответ отсюда https://developers.google.com/games/services/publishing/api/achievementConfigurations/list.Google Play Разработчик Api и JsonConvert.DeserializeObject

Проблема заключается в том, что эта строка заполняет только объект верхнего уровня, а список остается пустым. Нет сообщений об ошибках, которые затрудняют отслеживание происходящего. Я использовал веб-сайт для создания json-структурированных классов, и после этого я удалил дубликаты, которые там не нужны.

Ответ выглядит так, я удалил achievementConfiguration ресурс, потому что это очень долго, но его можно найти здесь https://developers.google.com/games/services/publishing/api/achievementConfigurations#resource

{ 
    "kind": "gamesConfiguration#achievementConfigurationListResponse", 
    "nextPageToken": string, 
    "items": [ 
    achievementConfigurations Resource 
    ] 
} 

У меня есть ряд классов, я создал зеркальное отображение данных, начиная с класс AchievementConfigurationListResponse

public class AchievementConfigurationListResponse 
    { 
     public string kind = "gamesConfiguration#achievementConfigurationListResponse"; 
     public string nextPageToken = ""; 

     List<AchievementConfigurationResource> items = new List<AchievementConfigurationResource>(); 
    } 

Далее идет AchievementConfigurationResource, который является пунктом в списке, он имеет несколько вложенных объектов

public class AchievementConfigurationResource 
    { 
     public static string[] types = new string[] { "STANDARD", "INCREMENTAL" }; 
     public static string[] states = new string[] { "REVEALED", "HIDDEN", "UNLOCKED" }; 

     public string kind = "gamesConfiguration#achievementConfiguration"; 
     public string token = ""; 
     public string id = ""; 
     public string achievementType = types[0]; 
     public string initialState = states[0]; 

     public int? stepsToUnlock; 

     public AchievementConfigurationDetail draft = new AchievementDataResource(); 
     public AchievementConfigurationDetail published = new AchievementDataResource(); 
    } 

Те вложенным объектом являются такого рода AchievementConfigurationDetail

public class AchievementConfigurationDetail 
    { 
     public string kind = "gamesConfiguration#achievementConfigurationDetail"; 
     public LocalizedStringBundle name = new LocalizedStringBundle(); 
     public LocalizedStringBundle description = new LocalizedStringBundle(); 
     public int pointValue = 5; 
     public string iconUrl = ""; 
     public int sortRank = 1; 
    } 

, который содержит несколько LocalizedStringBundles

public class LocalizedStringBundle 
    { 
     public string kind = "gamesConfiguration#localizedStringBundle"; 
     public List<Translation> translations = new List<Translation>(); 

     public class Translation 
     { 
      public string kind = "gamesConfiguration#localizedString"; 
      public string locale = "en-US"; 
      public string value = ""; 
     } 
    } 

Я называю это на JSON со следующей строкой:

AchievementConfigurationListResponse res = JsonConvert.DeserializeObject<AchievementConfigurationListResponse>(content); 

Вот копия ответа, s удаленные данные, но ключи и структура не повреждены. В этом только одна запись, потому что полный файл имеет длину 5000 строк.

{ 
"kind": "gamesConfiguration#achievementConfigurationListResponse", 
"items": [ 
    { 
    "kind": "gamesConfiguration#achievementConfiguration", 
    "token": "Unique Token", 
    "id": "Unique ID", 
    "achievementType": "STANDARD", 
    "initialState": "REVEALED", 
    "draft": { 
    "kind": "gamesConfiguration#achievementConfigurationDetail", 
    "name": { 
    "kind": "gamesConfiguration#localizedStringBundle", 
    "translations": [ 
     { 
     "kind": "gamesConfiguration#localizedString", 
     "locale": "en-US", 
     "value": "Name" 
     } 
    ] 
    }, 
    "description": { 
    "kind": "gamesConfiguration#localizedStringBundle", 
    "translations": [ 
     { 
     "kind": "gamesConfiguration#localizedString", 
     "locale": "en-US", 
     "value": "Description" 
     } 
    ] 
    }, 
    "pointValue": 5, 
    "iconUrl": "Icon url", 
    "sortRank": 1 
    }, 
    "published": { 
    "kind": "gamesConfiguration#achievementConfigurationDetail", 
    "name": { 
    "kind": "gamesConfiguration#localizedStringBundle", 
    "translations": [ 
     { 
     "kind": "gamesConfiguration#localizedString", 
     "locale": "en-US", 
     "value": "Name" 
     } 
    ] 
    }, 
    "description": { 
    "kind": "gamesConfiguration#localizedStringBundle", 
    "translations": [ 
     { 
     "kind": "gamesConfiguration#localizedString", 
     "locale": "en-US", 
     "value": "Description" 
     } 
    ] 
    }, 
    "pointValue": 5, 
    "iconUrl": "Icon url", 
    "sortRank": 1 
    } 
    } 
] 
} 

ответ

1

Json.NET по умолчанию не сериализовывает частных членов. Таким образом, вы должны сделать AchievementConfigurationListResponse.items быть публичным:

public List<AchievementConfigurationResource> items = new List<AchievementConfigurationResource>(); 

В качестве альтернативы, отметьте его [JsonProperty], которая позволяет сериализацию частных членов:

[JsonProperty] 
List<AchievementConfigurationResource> items = new List<AchievementConfigurationResource>(); 

 Смежные вопросы

  • Нет связанных вопросов^_^