前言:这是以下问题的衍生问题:
当我将MVC视图模型传递给KnockoutJS时,我习惯使用following syntax:
var initialData = @Html.Raw(Json.Encode(Model));
但最近,我一直看到人们使用following syntax:
var initialData = @Html.Raw( new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model));
我的问题:
System.Web.Script.Serialization.JavaScriptSerializer().Serialize
执行Json.Encode
没有做的事情吗?答案 0 :(得分:5)
反过来说:Json.Encode(Model)
比普通JavaScriptSerializer
做得更多:
Json.Encode
内部System.Web.Script.Serialization.JavaScriptSerializer
也使用DynamicJavaScriptConverter
,但会注册另一个名为DynamicJavaScriptConverter
的转换器。
Json.Encode
是
知道如何从动态对象获取成员值的转换器。
您可以查看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;
}
//...
}
source online:
Json.Encode
因此,使用dynamic
可以获得处理JavaScriptSerializer
个对象的额外支持,但如果您不需要它,则可以改为使用“vanilia”{{1}}。