Jim*_* G. 2 json asp.net-mvc-4 knockout.js
前言:这是以下问题的衍生问题:
将MVC视图模型传递给KnockoutJS时,我习惯使用以下语法:
var initialData = @Html.Raw(Json.Encode(Model));
Run Code Online (Sandbox Code Playgroud)
但最近,我一直看到人们使用以下语法:
var initialData = @Html.Raw( new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model));
Run Code Online (Sandbox Code Playgroud)
我的问题:
System.Web.Script.Serialization.JavaScriptSerializer().Serialize做一些Json.Encode不?这是另一种方式:Json.Encode(Model)更多的是平原JavaScriptSerializer:
在内部Json.Encode也使用System.Web.Script.Serialization.JavaScriptSerializer但它注册了一个额外的转换器DynamicJavaScriptConverter.
在哪里DynamicJavaScriptConverter是
知道如何从动态对象获取成员值的转换器.
public static class Json
{
private static readonly JavaScriptSerializer _serializer = CreateSerializer();
public static string Encode(object value)
{
// Serialize our dynamic array type as an array
DynamicJsonArray jsonArray = value as DynamicJsonArray;
if (jsonArray != null)
{
return _serializer.Serialize((object[])jsonArray);
}
return _serializer.Serialize(value);
}
private static JavaScriptSerializer CreateSerializer()
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new[] { new DynamicJavaScriptConverter() });
return serializer;
}
//...
}
Run Code Online (Sandbox Code Playgroud)
因此,使用Json.Encode你可以获得一些处理dynamic对象的额外支持,但如果你不需要它,你可以使用"vanilia" JavaScriptSerializer代替.