如何将含数字属性、日期对象的JSON转换为C#类模型
将带有数字前缀属性和动态日期键的JSON转换为C#类
嘿,我来帮你搞定这个JSON转C#类的问题!针对你给出的这种带数字前缀属性、日期作为动态键的JSON结构,咱们可以通过属性映射和字典类型完美解决,下面是具体方案:
1. 完整的C#类定义
首先,咱们创建对应的数据模型,用属性特性来映射那些带数字前缀的JSON字段,用字典来处理动态的日期键:
using Newtonsoft.Json; // 如果用Json.NET,需要安装这个NuGet包 // 如果你用System.Text.Json(.NET Core/.NET 5+),替换为using System.Text.Json.Serialization; public class StockPriceData { [JsonProperty("Meta Data")] // System.Text.Json用[JsonPropertyName("Meta Data")] public MetaData MetaData { get; set; } [JsonProperty("Time Series (Daily)")] // System.Text.Json用[JsonPropertyName("Time Series (Daily)")] public Dictionary<string, DailyTimeSeries> DailyTimeSeries { get; set; } } public class MetaData { [JsonProperty("1. Information")] public string Information { get; set; } [JsonProperty("2. Symbol")] public string Symbol { get; set; } [JsonProperty("3. Last Refreshed")] public string LastRefreshed { get; set; } [JsonProperty("4. Output Size")] public string OutputSize { get; set; } [JsonProperty("5. Time Zone")] public string TimeZone { get; set; } } public class DailyTimeSeries { [JsonProperty("1. open")] public string Open { get; set; } [JsonProperty("2. high")] public string High { get; set; } [JsonProperty("3. low")] public string Low { get; set; } [JsonProperty("4. close")] public string Close { get; set; } [JsonProperty("5. volume")] public string Volume { get; set; } }
2. 关键处理逻辑说明
- 数字前缀属性映射:C#的属性名称不能以数字开头,所以我们用
[JsonProperty](Json.NET)或[JsonPropertyName](System.Text.Json)特性,把C#的友好属性名和JSON里带数字的字段名一一对应起来,序列化/反序列化时就能正确匹配。 - 动态日期键处理:JSON里的
Time Series (Daily)是一个以日期字符串为键的对象,咱们用Dictionary<string, DailyTimeSeries>来接收它——字典的键就是日期字符串,值就是对应日期的价格数据,不管有多少个日期条目都能自动解析。
3. 反序列化示例
假设你已经有了JSON字符串,用Json.NET反序列化的代码如下:
// 假设jsonString是你的目标JSON内容 string jsonString = "{你的JSON内容}"; var stockData = JsonConvert.DeserializeObject<StockPriceData>(jsonString); // 访问数据示例 Console.WriteLine($"股票代码:{stockData.MetaData.Symbol}"); Console.WriteLine($"最新更新日期:{stockData.MetaData.LastRefreshed}"); // 遍历每日数据 foreach (var dailyEntry in stockData.DailyTimeSeries) { Console.WriteLine($"日期:{dailyEntry.Key},收盘价:{dailyEntry.Value.Close}"); }
如果用System.Text.Json,代码是这样的:
using System.Text.Json; var stockData = JsonSerializer.Deserialize<StockPriceData>(jsonString);
内容的提问来源于stack exchange,提问作者Ali Adravi
相关产品推荐
相关产品推荐

