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

JSON首数字开头键转C#类反序列化后3DSecure为null如何解决?

问题原因

你混用了两套JSON序列化库的属性:

  • 你反序列化用的是Newtonsoft.Json(Json.NET),但代码中标记的[JsonPropertyName]是System.Text.Json(微软官方原生JSON库)专属的属性,Newtonsoft.Json完全无法识别该标记。
  • 没有正确映射的情况下,Newtonsoft.Json默认会按类属性名做匹配,你的类属性名为_3DSecure,和JSON中的键名3DSecure不一致,因此无法匹配赋值,最终得到null值。
解决方案

方案1:继续使用Newtonsoft.Json

将所有属性替换为Newtonsoft.Json专属的[JsonProperty]标记即可:

// 需引用命名空间 using Newtonsoft.Json;
public class TransactionPaymentResponse
{
    [JsonProperty("3DSecure")]
    public _3DSecure _3DSecure { get; set; }
    // 其余代码省略
}

public class _3DSecure
{
    [JsonProperty("status")]
    public string Status { get; set; }
}

方案2:切换为System.Text.Json序列化

如果不想调整属性标记,可将反序列化代码替换为System.Text.Json的实现:

var responseStream = await httpResponseMessageForTranscation.Content.ReadAsStringAsync();
responseTranscation = System.Text.Json.JsonSerializer.Deserialize<TransactionPaymentResponse>(responseStream);
return responseTranscation;
补充验证点

如果修改后仍有问题,可检查以下配置:

  • 确保_3DSecure类为public访问级别
  • 若你手动给_3DSecure类添加了带参数的构造函数,需补充无参构造函数,供序列化库实例化对象使用

内容的提问来源于stack exchange,提问作者hanushic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:15:03