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

为什么JsonConvert.DeserializeObject会忽略JsonPropertyName特性?

反序列化属性为空问题修复方案

核心原因

你给ExternalMatchId属性标注的[JsonPropertyName("id")]是 System.Text.Json 库 的专属序列化特性,而你反序列化调用的JsonConvert.DeserializeObject属于 Newtonsoft.Json(Json.NET)库,两个库的序列化特性互不兼容,因此反序列化时无法将JSON结构中的id字段映射到ExternalMatchId属性,最终得到null值。

可选修复方案

方案1:替换为Newtonsoft.Json支持的特性

将MatchData类中的[JsonPropertyName("id")]替换为Newtonsoft.Json的[JsonProperty("id")]特性即可,修改前需先引入对应命名空间using Newtonsoft.Json;。
修改后的类代码示例:

[BsonCollection("matches")]
public class MatchData : Document
{
    [JsonProperty("id")]
    public string ExternalMatchId { get; set; }
    // 其余属性定义
}

方案2:统一使用System.Text.Json做反序列化

如果不想依赖Newtonsoft.Json的特性,可直接将手动反序列化的方法替换为System.Text.Json的实现:

var saveData = JsonSerializer.Deserialize<MatchData>(data.ToString());

优化方案

无需用dynamic类型接收请求参数,可直接将控制器方法的入参类型改为MatchData,ASP.NET Core会自动完成请求体的反序列化,省去手动处理步骤,代码更简洁也更不易出错:

[HttpPost("end")]
public ActionResult RoundEnd([FromBody] MatchData saveData)
{
    // 直接使用saveData执行业务逻辑即可
    // 其余代码
}

采用该方案时只要保证你使用的序列化特性和项目配置的全局JSON序列化器匹配即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:45:03