Я использую этот помощник, так как 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 (..) теперь, как упоминалось в ссылке Хеманта. (Он сам использует 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));
}
}
}
см. http: // stackoverflow.com/questions/3365551/asp-net-mvc-how-to-convert-view-model-in-json-object –