1

私は AchievementConfigurations: list REST Response をここからデシリアライズしようとしています https://developers.google.com/games/services/publishing/api/achievementConfigurations/list

問題は、この行が最上位のオブジェクトのみを埋め、リストが空のままであることです。エラー メッセージがスローされないため、何が起こっているのかを追跡するのが難しくなります。ウェブサイトを使用して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);

これは応答のコピーです。機密データは削除されていますが、キーと構造はすべてそのままです。ファイル全体の長さは 5000 行程度であるため、これには 1 つのレコードしか含まれていません。

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

1 に答える 1

1

Json.NET は、既定ではプライベート メンバーをシリアル化しません。AchievementConfigurationListResponse.itemsしたがって、公開する必要があります。

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

[JsonProperty]または、プライベート メンバーのシリアル化を有効にするようにマークします。

[JsonProperty]
List<AchievementConfigurationResource> items = new List<AchievementConfigurationResource>();
于 2016-08-16T22:36:10.260 に答える