[英]How to deserialize a dynamic property in a well defined model?
我有一個Web api方法定義如下:
[HttpPost]
public void Post(Input model)
{
...
}
使用這樣的輸入模型:
public class Input
{
public string Id { get; set; }
public object Extra { get; set; }
}
我想做的就是傳遞一個有效的JSON對象作為額外的參數,例如下面的jQuery示例:
$.post(
'http://localhost/api/myController',
{
id: 'someId',
extra: {
tags: ['a', 'b'],
anotherValue: 'hello',
oneMore: {
foo: 'bar'
}
}
});
ID正確進入了我的model.Id屬性。 但是, 額外的屬性作為{object}出現,由於我不知道其中的內容,因此無法以任何方式反序列化它。
我嘗試使其動態化和/或將其強制轉換為dynamic / ExpandoObject / Dictionary,但未成功。 我知道,如果我只收到原始的HttpRequestMessage並自己處理,就可以使它工作。 但是,我寧願不這樣做,而要依靠.NET進行的所有驗證。
可能嗎?
謝謝
編輯1:在測試了更多替代方案之后,我發現extra屬性沒有任何實際值,它只是被初始化為new object() 。 看起來默認的模型綁定程序實現不處理動態JSON(至少不是這樣),而只是調用它無法處理的model屬性的默認構造函數。
將屬性定義為object
應該可以,或者如果要明確顯示, JObject
Extra
屬性的類型設置為JObject
。
但是問題出在$.post
請求上。 為了將復雜的數據發布到web.api方法並允許模型綁定,您需要做兩件事:
JSON.stringify
將數據作為JSON發送 但是使用$.post
不能指定內容類型,因此需要使用$.ajax
:
因此,以下調用應將數據發布到您的操作中:
$.ajax({
url: 'http://localhost/api/myController',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(
{
id: 'someId',
extra: {
tags: ['a', 'b'],
anotherValue: 'hello',
oneMore: {
foo: 'bar'
}
}
})
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.