buduję moją listę tak:Powrót Json z Generic listy w 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;
}
Korzystanie obiektu:
public class SearchFormula
{
public string Title { get; set; }
public string Description { get; set; }
public string Url { get; set; }
}
I zaczął używać IHttpActionResult, zwracając OK (wyników); funkcjonować. Wierzę, że właśnie to doprowadziło mnie do mylącej drogi. Udało mi się wysłać ArrayList, ale to nie serializuje tak, jak myślałem.
Próbowałem zmienić to na ActionResult i próbowałem zwrócić Json (wynik) Wynik będący rzeczywistą listą.
Chciałbym nadal używać IhttpActionResult i wysyłać zserializowane dane za pomocą metody OK(). Wydaje mi się również, że mam konflikt między wbudowanym serializatorem json a seriserem json NewtonSoft.
Co powinienem użyć. Jaki jest najprostszy sposób serializowania ogólnej listy i przekazania wyniku do metody IHttpActionResult OK()?
Próbowałem JavaScriptSerializer ale zwraca XML nie 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();
}
}
Oto Json.NET Przykład:
public class SearchController : ApiController
{
public IHttpActionResult Get(string searchTerm)
{
var jsonResult = JsonConvert.SerializeObject(SearchUtility.SearchData(searchTerm));
if (jsonResult != null)
{
return Ok(jsonResult);
}
return NotFound();
}
}
Próbowałem MemoryStream ... bla bla bla ... nic nie wydaje się być czystym, prostym podejściem i nie ma żadnego przedmiotu dla tego konkretnego rozwiązania.
Zacznę od tego ...
Jak mogę serializacji Generic listy do formatu JSON?
Jak wysłać ten wynik przez IHttpActionResult?
* Aktualizacja *
To co ja dostaję do serializacji z Json.NET. ALE coś jest nie tak z formatem ... Nawet Fiddler nie może stwierdzić, że to Json. Mój nagłówek wygląda tak (w Fiddler):
Zaakceptuj: aplikacja/json, tekst/javascript, /; q = 0,01
"[{\" tytułowy \ ": \" Lacidofil ® \ "\ "opis \": \" Lacidofil ® wyposażony Instytut Rosell ’ s Lactobacillus helveticus i Lactobacillus rhamnosus. Oba te szczepy zostały szeroko przebadane w badaniach klinicznych u ludzi, posiadają ... \ ", \" url \ ": \"/products/product-detail.aspx? Pid = 103 \ "}, {\" tytuł \ ": \" MedCaps GI ™ \ ", \" opis \ ": \" MedCaps GI ™ zawiera składniki, które zostały zaprojektowane, aby odżywczo wspierać integralność i optymalne funkcjonowanie wyściółki żołądkowo-jelitowej. Wzbogacony o składniki odżywcze, takie jak l-glutam ... \ ", \" url \ ": \"/products/product-detail.aspx?pid = 114 \ "}, {\" title \ ": \" OrganiX ™ PhytoFood ™ \ ", \" opis \ ": \" OrganiX PhytoFood to wygodny sproszkowany preparat dostarczający kluczowych składników odżywczych dla utrzymania zdrowego stylu życia. Ta kompleksowa formuła zawiera innowacyjną mieszankę organi ... \ ", \" url \ ": \"/products/product-detail.aspx? Pid = 271 \ "}, {\" title \ ": \" Probio Defense ™ \ ", \" description \ ": \" Probio Defence ™ to optymalna kombinacja bakterii probiotycznych, które wspierają układ odpornościowy. \ R \ nTen produkt zawiera: \ r \ n \ r \ nLactobacillus helveticus Rosell-52 (3 miliardów) \ r \ nLeactobacilllu ... \ ", \" url \ ": \"/products/product-detail.aspx? pid = 102 \ "}, {\" title \ ": \" ProbioMax Daily DF ™ \ ", \" description \ ": \" ProbioMax Daily DF ™ jest wegetariańskim probiotycznym probiotykiem o czterech i trzech grupach, pozbawionym mleka i glutenu, o łącznej wartości 30 miliardów CFU i sztyletu; na kapsułkę. Każda wegetariańska kapsuła jest zamknięta w azotowym przedmuchiwanym ... \ ", \" url \ ": \"/products/product-detail.aspx? Pid = 181 \ "}, {\" title \ ": \" ProbioMax DF ™ \ ", \" description \ ": \" ProbioMax DF ™ to wegetariański probiotyk probiotyczny o objętości czterech miliardów bakterii, bez mleczarstwa i glutenu o łącznej wartości 100 miliardów CFU i sztylet; na kapsułkę. Każda wegetariańska kapsuła jest zamknięta w azotowanym aluminium ... \ ", \" url \ ": \"/products/product-detail.aspx? Pid = 184 \ "}, {\" title \ ": \" ProbioMax Plus DF ™ \ ", \" description \ ": \" Mnogość korzyści zdrowotnych osiąganych dzięki indywidualnej suplementacji bakterii probiotycznych , niepatogennych drożdży , Saccharomyces boulardii, immunoglobulin, ... \ ", \ "url \": \ "/ products/product-detail.aspx? pid = 185 \"}, {\ "title \": \ "Saccharomycin DF ™ \", \ "description \": \ "Saccharomycin DF ™ jest niezawierający laktozy, odporny na kwas żołądkowy, odporny, stabilny, europejski zgłoszony do opatentowania preparat zawierający Saccharomyces boulardii zweryfikowany przez DNA. Ten probiotyk wsparcie drożdże ... \ "\ "url \": \ "/ produkty/product-detail.aspx pid = 197 \"}]"
Pan spojrzał na Json.NET? –
To jest część problemu, pojawia się konflikt między domyślnym a newtonsoft. –
Myślałem, że Web API już domyślnie korzysta z JSON.NET. W tym, co napisałem, zawsze zwracam obiekt, chyba że specjalnie chcę zwrócić kod błędu HTTP. W ten sposób, jeśli twój klient chce używać XML zamiast JSON, nie musisz już wykonywać żadnej pracy. –