我有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)