假设我们的 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 并自己处理转换。
有任何想法吗?
谢谢!