2016-05-13 3 views
0

Я в страшной дилемме. Какую услугу я использую для преобразования объекта в JSON?Каков наилучший способ заставить контроллер C# MVC ответить на JSON?


Frist сценарий:

Я использую сериалайзер от Microsoft, код будет выглядеть следующим образом:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public JsonResult Get(string param) 
    { 
     return Json(result); 
    } 

Второй сценарий:

Я использую Newtonsoft, пример кода:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public string Get(string param) 
    { 
     return JsonConvert.SerializeObject(result); 
    } 

Что мне делать? Кто лучше, безопаснее или быстрее?

Я пытаюсь найти ответ в документации, но у меня все еще есть сомнения.

+0

Как раз мысль, вы проверили [ASP.NET Web API] (http://www.asp.net/web-api)? Он разработан для этого конкретного случая использования, без необходимости сериализации с вашей стороны. Я предлагаю это, потому что ваш заголовок говорит «самый простой способ» ... –

ответ

1

Каркас JsonResult подходит в 99% случаев. Было показано, что JSON.NET работает быстрее, но сериализация не является вашим типичным узким местом. Таким образом, если вы НЕОБХОДИМО использовать JSON.NET по умолчанию. Кстати, ваш второй сценарий as-is не возвращает application/json, но text/html.

1

Предыдущий ответчик дает хорошую оценку, но я могу дать ответ, основанный на том, как я подошел к проблеме.

В моем контроллере у меня есть маршрут/функция, которая на самом деле ищет json в файле, но вы также можете сериализовать объект, используя код пакета Newtonsoft nuget.

public ActionResult XData(string id) 
    { 
     string dir = WebConfigurationManager.AppSettings["X_Path"]; 

     //search for the file 
     if (Directory.Exists(dir) && System.IO.File.Exists(Path.Combine(dir, id, "X.json"))) 
     { 
      //read the file 
      string contents = System.IO.File.ReadAllText(Path.Combine(dir, id, "X.json")); 

      //return contents of the file as json 
      return Content(contents, "application/json"); 
     } 
     return new HttpNotFoundResult(); 
    } 
Смежные вопросы