2016-08-16 65 views
1

我正在嘗試反序列化AchievementConfigurations:列出來自此處的REST響應https://developers.google.com/games/services/publishing/api/achievementConfigurations/listGoogle 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>(); 
相關問題