C#如何为含未知动态键的JSON响应构建可反序列化的Model
正确的实体定义(适配Newtonsoft.Json)
你只需要将transaction_details对应的属性类型从List<TransactionDetails>替换为Dictionary<string, TransactionDetails>即可,C#的字典类型原生适配JSON中动态键的对象结构:
public class TransactionDetails { [JsonProperty("txnid")] public string TransactionId { get; set; } [JsonProperty("status")] public string Status { get; set; } [JsonProperty("mode")] public string Mode { get; set; } [JsonProperty("mihpayid")] public string MiPayId { get; set; } [JsonProperty("amt")] public string Amount { get; set; } // 注意这里要和JSON的键名完全匹配,原JSON是App_Name,不是App_name [JsonProperty("App_Name")] public string AppName { get; set; } } public class ResponseBody { [JsonProperty("status")] public int Status { get; set; } // 原JSON中status是数字类型,建议改为int更合适 [JsonProperty("msg")] public string Message { get; set; } [JsonProperty("transaction_details")] public Dictionary<string, TransactionDetails> Transactions { get; set; } }
反序列化示例
// jsonStr为接口返回的JSON字符串 ResponseBody result = JsonConvert.DeserializeObject<ResponseBody>(jsonStr); // 使用方式: // 1. 遍历所有交易 foreach (var transaction in result.Transactions.Values) { Console.WriteLine($"交易ID:{transaction.TransactionId},状态:{transaction.Status}"); } // 2. 用txnid直接查询对应交易 if (result.Transactions.TryGetValue("f9605b13-c300-4d11-b", out var targetTxn)) { // 处理指定交易 }
适配System.Text.Json的情况
如果用.NET自带的System.Text.Json库做序列化,只需要把所有[JsonProperty]特性替换为[JsonPropertyName]即可,实体结构和使用逻辑完全一致。
内容的提问来源于stack exchange,提问作者Unknown
相关产品推荐
相关产品推荐

