gpt4 book ai didi

json - System.Web.Script.Serialization.JavaScriptSerializer().Serialize 会做 Json.Encode 不会做的事情吗?

转载 作者:行者123 更新时间:2023-12-02 05:25:23 26 4
gpt4 key购买 nike

前言:这是以下问题的派生问题:

  1. Best practice on passing Mvc Model to KnockoutJS
  2. How to enable data binding in KnockoutJS using the ASP.NET MVC 3 "Razor" View Engine?

将我的 MVC View 模型传递给 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 不执行的操作?

最佳答案

这是另一种方式:Json.Encode(Model) 比普通的 JavaScriptSerializer 做的更多:

在内部,Json.Encode 也使用 System.Web.Script.Serialization.JavaScriptSerializer,但它注册了一个名为 DynamicJavaScriptConverter 的附加转换器。

DynamicJavaScriptConverter 是一个

Converter that knows how to get the member values from a dynamic object.

您可以检查Json.Encode source 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 代替。

关于json - System.Web.Script.Serialization.JavaScriptSerializer().Serialize 会做 Json.Encode 不会做的事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13161227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com