为什么JsonConvert.DeserializeObject忽略JsonPropertyName属性?



我有JsonConvert反序列化器的问题。我有class

[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)

相关内容

  • 没有找到相关文章

最新更新