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
相关产品推荐
相关产品推荐

