【问题标题】:Does System.Web.Script.Serialization.JavaScriptSerializer().Serialize do something that Json.Encode doesn't?System.Web.Script.Serialization.JavaScriptSerializer().Serialize 做 Json.Encode 没有做的事情吗?
【发布时间】:2012-10-21 02:31:06
【问题描述】:
【问题讨论】:
标签:
json
knockout.js
asp.net-mvc-4
【解决方案1】:
情况正好相反:Json.Encode(Model) 比普通的JavaScriptSerializer 做得更多:
在内部Json.Encode 也使用System.Web.Script.Serialization.JavaScriptSerializer,但它注册了一个名为DynamicJavaScriptConverter 的附加转换器。
DynamicJavaScriptConverter 是一个
知道如何从动态对象中获取成员值的转换器。
您可以查看Json.Encodesource online:
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;
}
//...
}
因此,使用 Json.Encode 您可以获得处理 dynamic 对象的一些额外支持,但如果您不需要它,您可以改用“vanilia”JavaScriptSerializer。