0

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 を自分で逆シリアル化し、自分で変換を処理できます。

何か案は?

ありがとう!

4

0 に答える 0