默认情况下,MVC使用Microsoft的JavascriptSerializer类.我有很多次发现这个类与Json.NET相比很短.WebAPI和MVC的未来版本已切换到Json.NET作为默认序列化程序.
有一些方法可以替换底层的默认序列化程序,但这需要付出很多努力.
您可以使用Json.NET序列化您的对象并通过更改您的返回值将其作为json返回:
return Content(JsonConvert.SerializeObject(info), "application/json");
这应该相当容易测试.我相信它会解决您的序列化问题.
为方便起见,您可以在控件基类上放置一个action方法,如下所示:
public virtual ActionResult JsonResponse(object obj) { return Content(JsonConvert.SerializeObject(obj), "application/json"); }
控制器中的用法:
public ActionResult GetData() { var info = new ComplexA { A = "test", B = "BB", Complex1 = new Foo {Name = "Ss", Prop1 = new Bar {A = "Name", B = false}} }; return JsonResponse(info); }