将.Net对象转换为视图中的JSON对象
我想将.Net对象转换为视图中的JSON。我的视图模型是这样的,将.Net对象转换为视图中的JSON对象
public class ViewModel{
public SearchResult SearchResult { get; set;}
}
public class SearchResult {
public int Id { get; set; }
public string Text{ get; set; }
}
我想将Model.SearchResult
转换为JSON对象。 Currenty我在做这样的:
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
//....
var s = @serializer.Serialize(Model.Institution);
但结果却是这样的,
var s = { "Name":"a","Id":1};
Create:228Uncaught SyntaxError: Unexpected token &
我怎样才能正确地将其转换为一个JSON对象?
我用这个帮手,因为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(..)现在,像mentionned取代串行在Hemant的引用中。 (它使用自己的JavaScriptSerializer)。
问题的根源在于HTML编码JSON的“@”。您可以使用@ Html.Raw(..)来避免此行为。
+:看看为Json.Net http://json.codeplex.com/
JSON.Net更新
我已经与JSON.net(更好)更新了辅助前一阵子。
似乎有些用户继续阅读,upvote和使用旧的代码。我希望他们使用更好的方式,使用下面的新版本,或者使用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));
}
}
}
我通常会建立口岸(https://github.com/*lynDev/NGon)对于这种但如果我只是在一个地方使用这是一个很好的解决方案。 – 2013-03-15 17:20:38
不知道ngon,谢谢你的提示! – 2013-03-27 16:23:14
这是一个更新到我原来的答复,我会承认,由于坚持纠缠的结果@Tyrsius:D拒绝放弃我不能从我的.js库中的单独文件中访问我的MVC 5 cshtml页面中的<script>
标记中创建的变量的事实,我发现如果将脚本标记放在@部分脚本语句nt阻止瓦尔斯在那里创建的全局作用域,并可用于我的插件小部件。我还没有在我的任何更复杂的应用程序中使用它,但是在另一个应用程序的protoType中使用它,答案如下。现在@ Html.Raw(...)起作用,我能够序列化一个可以立即使用的对象。
这件事我会从现在开始使用......再次感谢挂在那里与我@Tyrsius
@section scripts
{
<script type="text/javascript">
@using MRTCProtoType.Models.ControllerData.Contracts
var testVar = @Html.Raw(JsonConvert.SerializeObject(WMMWorkloadTestData.getWorkloadTestData()));
</script>
@Scripts.Render("~/bundles/homeworkflow")
}
下面的代码是在一个单独的js文件
$(document).ready(function() {
alert(JSON.stringify(testVar));
});
请参阅http:// *。COM /问题/ 3365551/ASP净MVC-如何对转换 - 视图 - 模型 - 到 - JSON对象 – 2011-12-14 09:36:28