1

AchievementConfigurations : desetialize하려고합니다. 여기에서 https://developers.google.com/games/services/publishing/api/achievementConfigurations/list의 REST 응답을 나열하십시오.Google Play 개발자 Api 및 JsonConvert.DeserializeObject

문제는이 줄은 최상위 수준 개체 만 채우고 목록은 비어있는 상태입니다. 오류 메시지는 어떤 일이 일어나고 있는지를 추적하기 어렵게하는 throw입니다. 웹 사이트를 사용하여 json 구조화 된 클래스를 생성 한 후 불필요한 곳에 중복을 제거했습니다. 정말 긴하지만 여기에서 찾을 수 있습니다 https://developers.google.com/games/services/publishing/api/achievementConfigurations#resource

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

나는 내가로 시작하는 데이터를 미러링 만든 일련의 클래스를 가지고 있기 때문에 응답은 다음과 같습니다

, 나는 achievementConfiguration 자원을 제거한 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에 전화를 포함 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 = ""; 
     } 
    } 

있습니다

다음은 응답 사본입니다. 제거 된 데이터는 제거되지만 키와 구조는 모두 손상되지 않습니다. 이 파일은 전체 파일이 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>(); 
관련 문제