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} ]}

我现在想实现一个自定义 ModelBinding,它只将“complexValues”参数转换为我自己的 MyComplexValue 实例列表。那可能吗?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。我希望它返回字符串“[ { Value: 1}, { Value: 2} ]”,这样我就可以自己反序列化这个 JSON 并自己处理转换。

有任何想法吗?

谢谢!

4

0 回答 0