2010-12-06 14 views
7

ビューモデルの一部としてdictionary<string,string>があります。私がしようとしているのは、このオブジェクトを循環させ、jsonオブジェクトとして出力することです。私の理由は、クライアントのスクリプトファイルを正しくローカライズできるからです。RazorビューエンジンでJsonを出力する

このため、出力が正しく、これを実現する方法

var clientStrings = {"test":"yay","goodBye":"Nah"}; 

任意のアイデアのようなものを見てする必要があります。

ありがとうございます。

答えて

10

mvc 3を使用している場合、JavaScriptSerializerにアクセスできます。次のことができるはずです:

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
string json = serializer.Serialize((object)yourDictionary); 

これは辞書をjsonにシリアライズします。レンダリングするビューにViewDataを送る前に、コントローラでこれを行うことができます。

7

また、無料のJson.NETライブラリをコード内に統合することもできます。

このライブラリには問題はありませんJavascriptSerializerは循環参照の問題のようです。

これは、あなたがこのアクションを実行する場合は、以下の結果が得られます

{ 
    "txt": "notepad.exe", 
    "bmp": "paint.exe", 
    "dib": "paint.exe", 
    "rtf": "wordpad.exe" 
} 

JsonNetResultは、単純なカスタムラッパークラスであるコントローラのアクション

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; 
} 

から出力JSONにライブラリを使用したサンプルであります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(); 
     } 
    } 
} 
+0

JSON.NETが辞書を実行できるかどうかわかりませんが、RubbleFordが要求していることを確認できますか? –

+0

これはシームレスに機能します:)私はあなたの喜びのために自分の答えを編集しました – Lorenzo

+0

@Lorenzo組み込みのJson(xxx)上でこれを使用しますか?どんな利点? –

15

MVCに組み込まれています。ちょうどJsonを返す(yourobject)。

関連する問題