Я строю свой список, как это:Возврат Json из списка Generic в Web API
public static List<SearchFormula> SearchData(string searchString)
{
var searchResults = new List<SearchFormula>();
SqlDataReader drResults = FormulaUtility.SearchFormulas(searchString);
if ((drResults != null) && (drResults.HasRows))
{
while (drResults.Read())
{
searchResults.Add(new SearchFormula()
{
// id use the GetValue function
Title = drResults.GetString(1),
Description = drResults.GetString(2),
Url = drResults.GetString(3)
// total use the GetValue Function
});
}
}
return searchResults;
}
С помощью этого объекта:
public class SearchFormula
{
public string Title { get; set; }
public string Description { get; set; }
public string Url { get; set; }
}
Я начал использовать IHttpActionResult, возвращая OK (результаты); функция. Я считаю, что это то, что заставило меня сбить с толку дорогу. Я успешно отправил ArrayList, но это не сериализовало то, как я думал.
Я попытался изменить его на ActionResult и попытался вернуть Json (результат). Результат - фактический список.
Я хотел бы продолжить использование IhttpActionResult и отправить сериализованные данные с помощью метода OK(). Кажется, у меня тоже есть конфликт между встроенным json-сериализатором и селекторами NewtonSoft json.
Что следует использовать. Каков самый простой способ просто сериализации общего списка и передачи результата в метод IHttpActionResult OK()?
Я попытался JavaScriptSerializer, но он возвращает XML не JSon ...
public class SearchController : ApiController
{
public IHttpActionResult Get(string searchTerm)
{
var jsonSerialiser = new JavaScriptSerializer();
var jsonResult = jsonSerialiser.Serialize(SearchUtility.SearchData(searchTerm));
if (jsonResult != null)
{
return Ok(jsonResult);
}
return NotFound();
}
}
Вот в Json.NET Пример:
public class SearchController : ApiController
{
public IHttpActionResult Get(string searchTerm)
{
var jsonResult = JsonConvert.SerializeObject(SearchUtility.SearchData(searchTerm));
if (jsonResult != null)
{
return Ok(jsonResult);
}
return NotFound();
}
}
Я попытался MemoryStream ... бла-бла-бла ... нет ничего похожего на чистый, простой подход, и для этого конкретного решения нет предмета.
Позвольте мне начать с этого ...
Как я могу сериализовать общий список для Json?
Как я могу отправить этот результат через IHttpActionResult?
* Update *
Это то, что я получаю для сериализации из Json.NET. НО что-то не так с форматом ... Даже Фиддлер не может определить, что это Json. Мой заголовок выглядит следующим образом (в Fiddler):
Принять: приложение/json, текст/javascript, /; д = 0,01
"[{\" название \ ": \" Lacidofil ® \ "\ "описание \": \" Lacidofil ® особенности Институт Rosell ’ с Lactobacillus Helveticus и лактобактерии рамнозус. Оба эти штамма были широко изучены в клинических испытаниях человека, имеют ... \ ", \" url \ ": \"/products/product-detail.aspx? Pid = 103 \ "}, {\" title \ ": \" MedCaps GI ™ \ ", \" description \ ": \" MedCaps GI ™ обладает ингредиентами, которые предназначены для правильной поддержки целостности и оптимальной функции желудочно-кишечного тракта. Укрепляется питательными веществами, такими как l-глутам ... \ ", \" url \ ": \"/products/product-detail.aspx?pid = 114 \ "}, {\" title \ ": \" OrganiX ™ PhytoFood ™ \ ", \" description \ ": \" OrganiX PhytoFood - это удобная порошковая композиция, обеспечивающая питательные вещества для поддержания здорового образа жизни. Эта всеобъемлющая формула включает в себя инновационную смесь органических ... \ ", \" url \ ": \"/products/product-detail.aspx? Pid = 271 \ "}, {\" title \ ": \" Пробио Defense ™ \ "описание \": \ "Пробио обороны ™ является оптимальным сочетанием пробиотических бактерий, которые поддерживают иммунную систему. \ R \ nЭтот продукт содержит: \ r \ n \ r \ nLactobacillus helveticus Rosell-52 (3 миллиард) \ r \ nLactobacillu ... \ ", \" url \ ": \"/products/product-detail.aspx? pid = 102 \ "}, {\" title \ ": \" ProbioMax Daily DF ™ \ ", \" description \ ": \" ProbioMax Daily DF ™ - вегетарианская, безмолочная и безглютеновая пробиотика с четырьмя штаммами общей суммой 30 миллиардов КОЕ и кинжала; на капсулу. Каждая вегетарианская капсула запечатана в продувке азотом ... \ ", \" url \ ": \"/products/product-detail.aspx? Pid = 181 \ "}, {\" title \ ": \" ProbioMax DF ™ \ ", \" description \ ": \" ProbioMax DF ™ - вегетарианская, безмолочная и безглютеновая пробиотика с четырьмя штаммами, суммарная 100 миллиардов КОЕ и кинжала; на капсулу. Каждая вегетарианская капсула запечатана в алюминий, продутый азотом ... \ ", \ url \": \ "/ products/product-detail.aspx? Pid = 184 \"}, {\ "title \": \ "ProbioMax Плюс DF ™ \ ", \" description \ ": \" Множество полезных преимуществ, получаемых отдельным человеком: добавление пробиотических штаммов бактерий, непатогенных дрожжей , Saccharomyces boulardii, иммуноглобулинов, ... \ ", \ "url \": \ "/ products/product-detail.aspx? pid = 185 \"}, {\ "title \": \ "Saccharomycin DF ™ \", \ "description \": \ "Saccharomycin DF ™ is не содержащая лактозы, желудочная кислота – устойчивая, стабильная европейская патентная формула, содержащая ДНК-подтвержденный Saccharomyces boulardii. Это пробиотик поддержка дрожжи ... \ "\ "URL \": \ "/ продукция/продукт-detail.aspx PID = 197 \"}]"
Вы смотрели в Json.NET? –
Это часть проблемы, я столкнулся с конфликтом между по умолчанию и newtonsoft. –
Я думал, что API Web уже использовал JSON.NET по умолчанию. В том, что я написал, я всегда возвращаю свой объект, если я специально не хочу возвращать код ошибки HTTP. Таким образом, если ваш клиент хочет использовать XML вместо JSON, у вас больше нет работы. –