1

Ich versuche, eine AchievementConfigurations zu deserialisieren: Liste REST Response von hier https://developers.google.com/games/services/publishing/api/achievementConfigurations/list.Google Play Entwickler API und JsonConvert.DeserializeObject

Das Problem besteht darin, dass diese Zeile nur das Objekt der obersten Ebene ausfüllt und die Liste bleibt leer. Es gibt keine Fehlermeldungen, die es schwierig machen herauszufinden, was passiert. Ich habe eine Website verwendet, um die json-strukturierten Klassen zu generieren, und danach habe ich die Duplikate entfernt, die unnötig waren.

Die Antwort wie folgt aussieht, habe ich die achievementConfiguration Ressource entfernt, weil es wirklich lang, aber es kann hier https://developers.google.com/games/services/publishing/api/achievementConfigurations#resource

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

Ich habe ich die Daten erstellt habe eine Reihe von Klassen findet Spiegelung mit dem Start AchievementConfigurationListResponse Klasse

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

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

nächstes die AchievementConfigurationResource ist das ein Element in der Liste ist, hat es mehrere verschachtelte Objekte

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(); 
    } 

Die verschachtelte Objekt sind von dieser Art von 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; 
    } 

Welche mehrere LocalizedStringBundles enthält

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 = ""; 
     } 
    } 

ich das fordere die json mit der folgenden Zeile:

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

Hier ist eine Kopie der Antwort, s Entsitive Daten entfernt, aber die Schlüssel und die Struktur sind alle intakt. Dieser enthält nur einen einzigen Datensatz, da die gesamte Datei etwa 5000 Zeilen lang ist.

{ 
"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 
    } 
    } 
] 
} 

Antwort

1

Json.NET serialisiert keine privaten Mitglieder standardmäßig. Daher müssen Sie sicherstellen, AchievementConfigurationListResponse.items öffentlich:

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

Alternativ kann mit [JsonProperty] markieren, die Serialisierung von privaten Mitgliedern ermöglicht:

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