Вывод Json с движком Razor - PullRequest
       7

Вывод Json с движком Razor

8 голосов
/ 06 декабря 2010

У меня есть dictionary<string,string> как часть моей модели вида. Я пытаюсь сделать цикл этого объекта и вывести его как объект json. Моя причина в том, чтобы я мог правильно локализовать файлы своих клиентских скриптов.

Выход для этого должен выглядеть примерно так:

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

Есть идеи, как этого добиться.

Заранее спасибо.

Ответы [ 3 ]

15 голосов
/ 06 декабря 2010

Он встроен в MVC.Просто верните Джсона (вашобъект).

10 голосов
/ 06 декабря 2010

Учитывая, что вы используете mvc 3, у вас будет доступ к JavaScriptSerializer.Вы должны быть в состоянии сделать следующее:

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

Это будет сериализовать ваш словарь в json.Возможно, вы захотите сделать это в контроллере перед отправкой ViewData в представление для визуализации.

7 голосов
/ 06 декабря 2010

Кроме того, вы можете интегрировать бесплатную библиотеку 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;
}

Если вы выполните это действие, вы получите следующие результаты

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

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();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...