C# Google Play开发者Api和JsonConvert.DeserializeObject
我正在尝试反序列化AchieventConfiguration:从这里列出REST响应 问题是这一行只填充顶层对象,列表仍然为空。不会抛出任何错误消息,因此很难跟踪正在发生的情况。我使用一个网站来生成json结构化类,然后删除了不必要的重复项 响应如下所示,我删除了achievementConfiguration资源,因为它非常长,但可以在这里找到 我创建了一系列类,从AchievementConfigurationListResponse类开始镜像数据C# Google Play开发者Api和JsonConvert.DeserializeObject,c#,json,json.net,deserialization,google-play-developer-api,C#,Json,Json.net,Deserialization,Google Play Developer Api,我正在尝试反序列化AchieventConfiguration:从这里列出REST响应 问题是这一行只填充顶层对象,列表仍然为空。不会抛出任何错误消息,因此很难跟踪正在发生的情况。我使用一个网站来生成json结构化类,然后删除了不必要的重复项 响应如下所示,我删除了achievementConfiguration资源,因为它非常长,但可以在这里找到 我创建了一系列类,从AchievementConfigurationListResponse类开始镜像数据 public class Achieve
public class AchievementConfigurationListResponse
{
public string kind = "gamesConfiguration#achievementConfigurationListResponse";
public string nextPageToken = "";
List<AchievementConfigurationResource> items = new List<AchievementConfigurationResource>();
}
这些嵌套对象属于此类型的AchieventConfiguration详细信息
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;
}
其中包含多个LocalizedStringBundle
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.NET不会序列化私有成员。因此,您需要将
实现配置列表响应设置为公共项:
public List<AchievementConfigurationResource> items = new List<AchievementConfigurationResource>();
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 = "";
}
}
AchievementConfigurationListResponse res = JsonConvert.DeserializeObject<AchievementConfigurationListResponse>(content);
{
"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
}
}
]
}
public List<AchievementConfigurationResource> items = new List<AchievementConfigurationResource>();
[JsonProperty]
List<AchievementConfigurationResource> items = new List<AchievementConfigurationResource>();