Возврат объекта задания в формате Json с конечной точки

#c# #asp.net-mvc #json #json.net

#c# #asp.net-mvc #json #json.net

Вопрос:

Я бы хотел сделать что-то вроде этого:

 var taxonomyJson = JObject.FromObject(taxonomy);
return Json(taxonomyJson, JsonRequestBehavior.AllowGet);
  

Я пробовал преобразовать taxonomyJson в JToken и различные другие свойства. Я пробовал перенос и т.д. Но это всегда выдает ошибки.

Конечно, я могу вернуть taxonomyJson.ToString() , но мне это не очень нравится, потому что тогда это оборачивает дополнительную двойную квоту вокруг моей строки, которую моему JavaScript придется удалить перед вызовом JSON.parse() по ней.

Если Json() может обрабатывать сериализуемые объекты, почему он не может обрабатывать a JObject или a JToken , для которого JSON уже подготовлен?

Ответ №1:

Как насчет:

 return Content(taxonomyJson.ToString(), "application/json");
  

И это для массива:

 var jObject = JObject.FromObject(new { Payload = arrayOfJObjects });
return Content(jObject.ToString(), "application/json");
  

Комментарии:

1. Как насчет того, является ли полезная нагрузка списком элементов объекта задания. Каков наилучший способ для этого?

2. У меня сработало, спасибо, просто обратите внимание, что возвращаемый тип метода должен быть ContentResult.

Ответ №2:

На самом деле он предназначен для обработки taxonomy объекта, который у вас уже есть, нет необходимости преобразовывать его с помощью одного сериализатора Json (Json.NET ) использовать другой (System.Web.Javascript.Сериализатор), чтобы отправить его по сети.

Комментарии:

1. Да, я знаю. Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть две разные структуры данных, которые мне нужно объединить вместе. Мне сложно делать это с объектами на стороне сервера, поэтому я конвертирую их в JObjects и объединяю их вместе.

Ответ №3:

Вы могли бы создать вспомогательный метод для выполнения этого на стороне сервера, например

 public static class JSON{
      public static string ToJavaScriptObject(this object @object){
          var jobject =  JObject.FromObject(@object).ToString();
          jobject = jobject.Substring(1);
          jobject = jobject.Substring(0,jobject.Length-1);
          return jobject;
      }
}
  

Комментарии:

1. Интересная идея, но я не думаю, что это сработает. Дополнительные кавычки не будут прикреплены позже, так что это действительно просто удалит первый и последний символ моего JSON.

2. @Samo, тогда, похоже, ваш лучший выбор — пользовательский ActionResult. Ознакомьтесь с этим сообщением в блоге, в нем может быть то, что вам нужно: james.newtonking.com/archive/2008/10/16 /…