1

AchievementConfigurations:リストRESTレスポンスをここから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あり、それはいくつかのネストされたオブジェクト

を持っています

AchievementConfigurationListResponse res = JsonConvert.DeserializeObject<AchievementConfigurationListResponse>(content); 
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(); 
    } 

これらのネストされたオブジェクトは、私は次の行で、JSONでこのメソッドを呼び出し、いくつかの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 = ""; 
     } 
    } 

が含まれてい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; 
    } 

のこのタイプであります

ここにレスポンスのコピーがあります。残っているデータは削除されますが、キーと構造は完全なままです。これは、完全なファイルが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>(); 
関連する問題