You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:09:04