次のように定義されたWebAPIメソッドがあります。
[HttpPost]
public void Post(Input model)
{
...
}
このような入力モデルの場合:
public class Input
{
public string Id { get; set; }
public object Extra { get; set; }
}
私がやりたいのは、jQueryを使用した次の例のように、有効なJSONオブジェクトを追加のパラメーターとして渡すことです。
$.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:いくつかの代替案をテストした後、追加のプロパティには実際の値がなく、新しいobject()として初期化されていることがわかりました。デフォルトのモデルバインダー実装は動的JSONを処理せず(少なくともこのようにはなりません)、処理できないモデルプロパティのデフォルトコンストラクターを呼び出すだけのようです。