我从 asp.net mvc 2 开始使用这个助手
public static MvcHtmlString ToJson(this HtmlHelper html, object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return MvcHtmlString.Create(serializer.Serialize(obj));
}
public static MvcHtmlString ToJson(this HtmlHelper html, object obj, int recursionDepth)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RecursionLimit = recursionDepth;
return MvcHtmlString.Create(serializer.Serialize(obj));
}
在视图中:
<script>
var s = @(Html.ToJson(Model.Content));
</script>
我现在应该用 JSON.Encode(..) 替换序列化程序,就像 Hemant 在引用中提到的那样。 (它使用自己的 JavaScriptSerializer)。
问题的根源是 HTML 编码 JSON 的“@”。您可以使用@Html.Raw(..) 来避免这种行为。
+: 看看Json.Net http://json.codeplex.com/
JSON.Net 更新
我不久前用 JSON.net 更新了帮助程序(好多了)。
似乎有些用户继续阅读、支持和使用旧代码。我希望他们使用更好的方法,使用下面的新版本,或者使用 NGon 就像 Matthew Nichols 在评论中注意到它。
代码如下:
using System;
using Newtonsoft.Json;
namespace System.Web.Mvc
{
public static class HtmlHelperExtensions
{
private static readonly JsonSerializerSettings settings;
static HtmlHelperExtensions()
{
settings = new JsonSerializerSettings();
// CamelCase: "MyProperty" will become "myProperty"
settings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
}
public static MvcHtmlString ToJson(this HtmlHelper html, object value)
{
return MvcHtmlString.Create(JsonConvert.SerializeObject(value, Formatting.None, settings));
}
}
}