c# - 为什么 JsonConvert.DeserializeObject 忽略 JsonPropertyName 属性?
问题描述
我对 JsonConvert 反序列化器有疑问。我有课
[BsonCollection("matches")]
public class MatchData : Document
{
[JsonPropertyName("id")]
public string ExternalMatchId { get; set; }
...
}
在我的控制器中,我试图以这种方式反序列化:
[HttpPost("end")]
public ActionResult RoundEnd([FromBody] dynamic data)
{
var saveData = JsonConvert.DeserializeObject<MatchData>(data.ToString());
...
}
输入 JSON 看起来像
"{"id": "61696f268c7b70b5f3e85803",
"game_server_id": "615ed4a1cd95e8209a4ab67d",
...
但是在我的输出MatchData
对象ExternalMatchId
中是空的。如何解决?
解决方案
你在这里混合框架。该JsonPropertyName
属性用于System.Text.Json
命名空间,而您使用 JSON.Net 进行反序列化。所以解决方案是坚持其中之一。使用内置框架反序列化:
System.Text.Json.JsonSerializer.Deserialize<MatchData>(data.ToString());
或者切换属性以使用 JSON.Net 版本:
[JsonProperty("Foo")]
说了这么多,看起来您可以通过让 MVC 为您完成工作来简化整个事情。而不是dynamic
用作模型(不要这样做 - 动态是有问题的,每次使用它时都会有一只小猫死掉),直接将模型放在这里:
public ActionResult RoundEnd([FromBody] MatchData data)
推荐阅读
- ngx-graph - 有没有办法在 ngx-graph 中的节点上方显示边缘?
- java - Java 正则表达式检查
- vue.js - 如何使用 axio 调用的响应来构建另一个请求
- ios - 如何在使用 CocoaPods 时解决错误“XX.framework 的捆绑包”包含不允许的文件“Frameworks”
- r - 使用shinydashboard和shinyjs在tabBox中启动时隐藏tabPanel
- dagger-2 - Dagger 2 中的错误:无法解析组件类/组件类没有代码生成
- java - Http 请求延迟到其他微服务
- c# - 以下一代格式提供图像,在不更改旧链接的情况下替换图像
- r - autoarfima 使用 R 中的 rugarch 包选择 arfima 模型的参数
- kubernetes - 从文件中删除特定类型除外:kubectl delete -{not}l type=volume -f file.yml