代码之家  ›  专栏  ›  技术社区  ›  ChadT

将application/json绑定到asp.net mvc中的poco对象,序列化异常

  •  2
  • ChadT  · 技术社区  · 16 年前

    我正在将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) {
        // check if errors has any in the collection!
    }
    

    所以推测一下,这里发生了什么,如果将json序列化为对象类型有问题(如果字符串不能被解析为十进制类型或类似的eg类型),它会将错误添加到集合,然后将错误传递到视图。然后,它可以检查此集合是否有错误并向客户端报告。

    问题是我似乎找不到 哪一个 字段导致了问题。理想情况下,我想回到视图,说“这个字段”有问题。SerializationException类似乎没有提供这种灵活性。

    这么高的集体怎么会考虑解决这个问题呢?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Jonathan Parker    16 年前

    我只需要做一个ajax表单帖子。这容易多了。

    http://plugins.jquery.com/project/form

    http://malsup.com/jquery/form/

        2
  •  1
  •   Dan    15 年前

    这个怎么样: Json.Net 它读取一个json字符串,然后将其反序列化为给定的poco对象。

    string jsonResult = GetJsonStringFromSomeService();
    MyPocoObject myobject = JsonConvert.DeserializeObject<MyPocoObject>(jsonResult);
    Console.Write("Damn that is easy");
    

    但是对于错误发生的地点,我不太确定。