WebService に次のメソッドがあるとします。
ActionResult SomeMethod(int primitiveValue, List<MyComplexValue> complexValues)
{
//...
}
class MyComplexValue
{
public int TransformedValue { get; set; }
}
WebClient は、次の JSON データをメソッドに投稿します。
{ primitiveValue: 17, complexValues: [ { Value: 1}, { Value: 2} ]}
「complexValues」パラメーターを独自の MyComplexValue インスタンスのリストに変換するだけのカスタム ModelBinding を実装したいと考えています。それは可能ですか?DefaultModelBinder は引き続きすべてのプリミティブ値 (パラメーター「primitiveValue」など) を処理する必要があります。
次の方法でカスタム ModelBinder を実装しようとしました。
public class CustomModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
string incomingData = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).AttemptedValue;
if (incomingData == null)
return null;
//Transform passed object list to ComplexValue List
}
}
//...
ActionResult SomeMethod(int primitiveValue, [ModelBinder(typeof(CustomModelBinder ))] List<MyComplexValue> complexValues)
{
//...
}
問題は、GetValue が常に null を返すことです。文字列 "[ { 値: 1}, { 値: 2} ]" を返したいので、この JSON を自分で逆シリアル化し、自分で変換を処理できます。
何か案は?
ありがとう!