我有一个现有的控制器,[FromBody]
在方法中按预期工作HttpPost
。在编写测试时,我发现有必要使用客户序列化程序以避免循环引用,因为父对象有一个引用父对象的子对象。序列化程序使用以下设置:
JsonSerializerSettings Settings = new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Auto,
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
ObjectCreationHandling = ObjectCreationHandling.Auto
};
问题是[FromBody]
无法解析该序列化程序生成的对象(它会引发 Newtonsoft.Json.JsonSerializationException)。但是,如果我改变[FromBody]
为动态的,例如
public IActionResult Update([FromBody]dynamic json)
{
var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<MyType>(json);
...
}
然后我就可以毫无问题地解析对象。这让我很困惑,我想知道是否可以覆盖 WebApi 所做的事情,[FromBody]
以便我可以获得正确的对象,而不必让每个方法都接受dynamic
参数?