c# - 反序列化具有可变 ID 的 Json 字符串
问题描述
我对 JSON 不太了解,但我有这个字符串:
{
"status":"ok",
"meta":{
"count":1
},
"data":{
"504969624":{
"statistics":{
"all":{
"wins":1921
}
}
}
}
}
我想在 C# 中使用它,但我不知道如何使用其中的数字构建类。(它是一个 ID,所以它会改变)。当我对其进行硬编码并像这样“公共类_504969624”那样编写它时它可以工作,但是它不会与其他ID一起工作。有任何想法吗?
解决方案
扩充数据以在 中具有多个键data
:
{
"status": "ok",
"meta": {
"count": 1
},
"data": {
"504969624": {
"statistics": {
"all": {
"wins": 1921
}
}
},
"504969625": {
"statistics": {
"all": {
"wins": 42
}
}
}
}
}
这有助于QuickType应用生成如下所示的 C# 类结构:
// <auto-generated />
//
// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
//
// using QuickType;
//
// var stats = Stats.FromJson(jsonString);
namespace QuickType
{
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public partial class Stats
{
[JsonProperty("status")]
public string Status { get; set; }
[JsonProperty("meta")]
public Meta Meta { get; set; }
[JsonProperty("data")]
public Dictionary<string, Datum> Data { get; set; }
}
public partial class Datum
{
[JsonProperty("statistics")]
public Statistics Statistics { get; set; }
}
public partial class Statistics
{
[JsonProperty("all")]
public All All { get; set; }
}
public partial class All
{
[JsonProperty("wins")]
public long Wins { get; set; }
}
public partial class Meta
{
[JsonProperty("count")]
public long Count { get; set; }
}
public partial class Stats
{
public static Stats FromJson(string json) => JsonConvert.DeserializeObject<Stats>(json, QuickType.Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this Stats self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
}
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters =
{
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
}
推荐阅读
- c# - 使用计时器来延迟方法
- android - FirebaseInstanceId:令牌检索失败:SERVICE_NOT_AVAILABLE 错误
- angular - 用户登录后和角度导航后刷新标题菜单
- python - 预测图像目录 - 使用 tf.estimators 的 Conv Nets
- java - 控制 Rancher 2 的 Java API
- java - JDBC SQL Server:未为参数编号设置值
- sharepoint-online - Sharepoint Online:即使使用支持的列类型也无法创建复合索引
- vlookup - Excel中的Vlookup一直无法正常工作
- visual-studio - 使用测试组合分布的 Visual Studio 性能测试
- maven - 具有代码质量的 Gitlab ci:此 GitLab CI 配置无效