我有一個現有的控制器,其中[FromBody]
正如HttpPost
方法所期望的那樣工作。在編寫測試時,我發現有必要使用客戶序列化程序,以避免由於父對象具有引用父對象的子對象而引起的循環引用。串行化器使用這些設置:WebApi [FromBody]解析
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
參數的情況下獲得正確的對象?
我假設您直接使用實體。我的意思是你使用相同的實體爲你的數據庫操作和API返回類型? –
沒錯,我的一些API調用其他API,因此這種序列化/反序列化對我很重要 – riqitang