Jay*_*ena 33 javascript jquery json asp.net-mvc-3
我想在视图中将.Net对象转换为JSON.我的视图模型是这样的,
public class ViewModel{
public SearchResult SearchResult { get; set;}
}
public class SearchResult {
public int Id { get; set; }
public string Text{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想转换Model.SearchResult为JSON对象.我正在这样做:
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
//....
var s = @serializer.Serialize(Model.Institution);
Run Code Online (Sandbox Code Playgroud)
但结果是这样的,
var s = { "Name":"a","Id":1};
Create:228Uncaught SyntaxError: Unexpected token &
Run Code Online (Sandbox Code Playgroud)
如何将其正确转换为JSON对象?
小智 35
我从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));
}
Run Code Online (Sandbox Code Playgroud)
在视图中:
<script>
var s = @(Html.ToJson(Model.Content));
</script>
Run Code Online (Sandbox Code Playgroud)
我现在应该用JSON.Encode(..)替换序列化程序,就像在Hemant的引用中提到的那样.(它使用自己的JavaScriptSerializer).
您的问题的根源是"@",HTML编码JSON.您可以使用@ Html.Raw(..)来避免此行为.
+:看看Json.Net http://json.codeplex.com/
JSON.Net更新
我刚刚用JSON.net更新了助手(好多了).
似乎有些用户继续阅读,upvote和使用旧代码.我希望他们使用更好的方式,使用下面的新版本,或使用像Matthew Nichols这样的NGon在评论中注意到它.
这是代码:
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33200 次 |
| 最近记录: |