Rub*_*ord 8 asp.net-mvc json razor asp.net-mvc-3
我有一个dictionary<string,string>视图模型的一部分.我要做的是循环这个对象并将其输出为json对象.我之所以这样,是因为我可以正确地本地化我的客户端脚本文件.
这个输出需要看起来像
var clientStrings = {"test":"yay","goodBye":"Nah"};
Run Code Online (Sandbox Code Playgroud)
任何想法如何正确实现这一点.
提前致谢.
Jer*_* B. 10
考虑到您使用的是mvc 3,您可以访问JavaScriptSerializer.您应该能够执行以下操作:
JavaScriptSerializer serializer = new JavaScriptSerializer();
string json = serializer.Serialize((object)yourDictionary);
Run Code Online (Sandbox Code Playgroud)
这会将你的字典序列化为json.在将ViewData发送到要渲染的视图之前,您可能希望在控制器中执行此操作.
您还可以在代码中集成免费的Json.NET库.
这个库没有遇到JavascriptSerializer像循环引用问题那样的问题.
这是一个使用库从控制器操作输出JSON的示例
public virtual ActionResult ListData() {
Dictionary<string, string> openWith = new Dictionary<string, string>();
openWith.Add( "txt", "notepad.exe" );
openWith.Add( "bmp", "paint.exe" );
openWith.Add( "dib", "paint.exe" );
openWith.Add( "rtf", "wordpad.exe" );
JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.Data = openWith;
return jsonNetResult;
}
Run Code Online (Sandbox Code Playgroud)
如果您执行此操作,您将获得以下结果
{
"txt": "notepad.exe",
"bmp": "paint.exe",
"dib": "paint.exe",
"rtf": "wordpad.exe"
}
Run Code Online (Sandbox Code Playgroud)
JsonNetResult是一个围绕Json.NET库功能的简单自定义包装类.
public class JsonNetResult : ActionResult
{
public Encoding ContentEncoding { get; set; }
public string ContentType { get; set; }
public object Data { get; set; }
public JsonSerializerSettings SerializerSettings { get; set; }
public Formatting Formatting { get; set; }
public JsonNetResult() {
SerializerSettings = new JsonSerializerSettings();
}
public override void ExecuteResult( ControllerContext context ) {
if ( context == null )
throw new ArgumentNullException( "context" );
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = !string.IsNullOrEmpty( ContentType )
? ContentType
: "application/json";
if ( ContentEncoding != null )
response.ContentEncoding = ContentEncoding;
if ( Data != null ) {
JsonTextWriter writer = new JsonTextWriter( response.Output ) { Formatting = Formatting };
JsonSerializer serializer = JsonSerializer.Create( SerializerSettings );
serializer.Serialize( writer, Data );
writer.Flush();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18107 次 |
| 最近记录: |