假设我们的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”)。
我试图通过以下方式实现Custom 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并自己处理转换。
有什么想法吗?
谢谢!