1
我有一個WebAPI端點來接受一個通用對象。從POST主體反序列化一個通用對象
[HttpPost]
[ApiRoute("endpoint/{type}")]
public IHttpActionResult MyPostEndpoint(TypeEnum type, [FromBody] object myObject){}
我們的對象上工作一般,但然後最終將其轉化爲我們的對象類型,但是當我們這樣做,我們必須首先把它變成一個JObject,所以抓住物體看起來是這樣的:
var myfoo = ((JObject) object).ToObject<Foo>();
如果我直接提供Foo作爲POST參數(例如[FromBody] Foo myObject
),那麼它會將傳入的JSON反序列化爲Foo,但它不會反序列化爲通用C#對象。有沒有一種方法可以讓它反序列化爲一個通用的C#對象,而不是將它留在JObject中,這樣我就可以像這樣獲取myfoo了?
var myfoo = (Foo) object;
是否有一個理由,爲什麼你不希望參數指定爲'Foo'?爲什麼它需要成爲一個「對象」?你說它在指定爲'Foo'時有效。 –
您在此上下文中使用「通用」不正確。無論如何,嘗試將'object'改爲'JObject'。您最好創建適當的類型並使用它。接受任何格式的API,API將會在早些時候找出試圖發送中斷的API。 – CodeCaster
爲了使'(Foo)obj'投射正常,'obj'必須已經可以賦值給'Foo'類型。在這種情況下,它需要被反序列化爲一個'Foo'(或者'Foo'的後代)。在這一點上,它不能也是一個'JObject'(除非'JObject'從'Foo'下降!)是否有動機去控制反序列化?也許要抓到一個無效的演員? – Oly