我正在将json从我的视图传递回我的控制器操作以执行操作。要将发送的json转换为poco,我将使用此操作筛选器:
public class ObjectFilter : ActionFilterAttribute {
public Type RootType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext) {
IList<ErrorInfo> errors = new List<ErrorInfo>();
try {
object o = new DataContractJsonSerializer(RootType).ReadObject(filterContext.HttpContext.Request.InputStream);
filterContext.ActionParameters["postdata"] = o;
}
catch (SerializationException ex) {
errors.Add(new ErrorInfo(null, ex.Message));
}
finally {
filterContext.ActionParameters["errors"] = errors.AsEnumerable();
}
}
它使用datacontractjsonserializer将json映射到我的对象。我的动作被装饰成这样:
[ObjectFilter(RootType = typeof(MyObject))]
public JsonResult updateproduct(MyObject postdata, IEnumerable<ErrorInfo> errors) {
}
所以推测一下,这里发生了什么,如果将json序列化为对象类型有问题(如果字符串不能被解析为十进制类型或类似的eg类型),它会将错误添加到集合,然后将错误传递到视图。然后,它可以检查此集合是否有错误并向客户端报告。
问题是我似乎找不到
哪一个
字段导致了问题。理想情况下,我想回到视图,说“这个字段”有问题。SerializationException类似乎没有提供这种灵活性。
这么高的集体怎么会考虑解决这个问题呢?