costruisco la mia lista come questa:ritorno JSON da elenco generico in API Web
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;
}
Utilizzando questo oggetto:
public class SearchFormula
{
public string Title { get; set; }
public string Description { get; set; }
public string Url { get; set; }
}
ho iniziato ad usare l'IHttpActionResult, restituendo il bene (risultati); funzione. Credo che questo sia ciò che mi ha fatto iniziare la strada confusa. Avevo inviato con successo un ArrayList ma questo non serializzava come pensavo.
Ho provato a cambiarlo in ActionResult e ho tentato di restituire Json (risultato). Il risultato è la lista effettiva.
Vorrei continuare a utilizzare IhttpActionResult e inviare i dati serializzati con il metodo OK(). Mi sembra anche di avere un conflitto tra il serializzatore json integrato e il serializzatore json NewtonSoft.
Cosa dovrei usare. Qual è il modo più semplice di serializzare semplicemente un elenco generico e passare il risultato nel metodo IHttpActionResult OK()?
Ho provato il JavaScriptSerializer ma restituisce XML non 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();
}
}
Ecco la Json.Net Esempio:
public class SearchController : ApiController
{
public IHttpActionResult Get(string searchTerm)
{
var jsonResult = JsonConvert.SerializeObject(SearchUtility.SearchData(searchTerm));
if (jsonResult != null)
{
return Ok(jsonResult);
}
return NotFound();
}
}
Ho provato il MemoryStream ... bla bla bla ... niente sembra un approccio pulito e diretto e non esiste materia per questa soluzione specifica.
Vorrei iniziare con questo ...
Come posso serializzare un elenco generico a JSON?
Come posso inviare quel risultato tramite IHttpActionResult?
* Aggiornamento *
Questo è quello che sto ottenendo per la serializzazione da Json.Net. MA c'è qualcosa che non va nel formato ... Persino Fiddler non può determinare che sia Json. Il mio Header assomiglia a questo (in Fiddler):
Accept: application/json, text/javascript, /; q = 0,01
"[{\" titolo \ ": \" Lacidofil ® \ "\ "description \": \" Lacidofil ® caratteristiche Institut Rosell ’ s Lactobacillus helveticus e Lactobacillus rhamnosus. Entrambi questi ceppi sono stati ampiamente studiati nelle sperimentazioni cliniche umane, possiedono un ... \ ", \" url \ ": \"/products/product-detail.aspx? Pid = 103 \ "}, {\" title \ ": \" MedCaps GI ™ \ ", \" description \ ": \" MedCaps GI ™ contiene ingredienti progettati per supportare nutrizionalmente l'integrità e la funzione ottimale del rivestimento gastrointestinale. Fortificato con sostanze nutritive come l-glutam ... \ ", \" url \ ": \"/products/product-detail.aspx?pid = 114 \ "}, {\" title \ ": \" OrganiX ™ PhytoFood ™ \ ", \" description \ ": \" OrganiX PhytoFood è una formulazione in polvere conveniente che fornisce i nutrienti chiave per supportare uno stile di vita sano. Questa formula completa incorpora una miscela innovativa di organi ... \ ", \" url \ ": \"/products/product-detail.aspx? Pid = 271 \ "}, {\" title \ ": \" Probio Defense ™ \ ", \" description \ ": \" Probio Defense ™ è una combinazione ottimale di batteri probiotici che supporta il sistema immunitario. \ R \ nIl prodotto contiene: \ r \ n \ r \ nLactobacillus helveticus Rosell-52 (3 miliardi) \ r \ nLactobacillu ... \ ", \" url \ ": \"/products/product-detail.aspx? pid = 102 \ "}, {\" title \ ": \" ProbioMax Daily DF ™ \ ", \" descrizione \ ": \" ProbioMax Daily DF ™ è un probiotico vegetariano, da latte e senza glutine, a quattro ceppi per un totale di 30 miliardi di CFU e pugnale; per capsula. Ogni capsula vegetale è sigillata in alu ... \ ", \" url \ ": \"/products/product-detail.aspx? Pid = 181 \ "}, {\" title \ ": \" ProbioMax DF ™ \ ", \" description \ ": \" ProbioMax DF ™ è un probiotico vegetariano, da latte e senza glutine, a quattro ceppi per un totale di 100 miliardi di CFU e pugnale; per capsula. Ogni capsula vegetale è sigillata in alluminio purificato con azoto ... \ ", \" url \ ": \"/products/product-detail.aspx? Pid = 184 \ "}, {\" title \ ": \" ProbioMax Plus DF ™ \ ", \" description \ ": \" La moltitudine di benefici salutari raggiunti dall'individuo integrazione di ceppi probiotici di batteri, il lievito non patogeno , Saccharomyces boulardii, immunoglobuline, ... \ ", \ "url \": \ "/ products/product-detail.aspx? pid = 185 \"}, {\ "title \": \ "Saccharomycin DF ™ \", \ "description \": \ "Saccharomycin DF ™ è una formula resistente, priva di lattosio, resistente allo stomaco –, stabile, in attesa di brevetto europeo contenente Saccharomyces boulardii verificato dal DNA. Questo supporto lievito probiotico ... \ "\ "URL \": \ "/ Prodotti/Product-detail.aspx pid = 197 \"}]"
Hai guardato in Json.Net? –
Questo fa parte del problema, sto ottenendo un conflitto tra il default e newtonoft. –
Ho pensato che l'API Web già utilizzato JSON.NET per impostazione predefinita. In quello che ho scritto, restituisco sempre il mio oggetto, a meno che non voglia specificamente restituire il codice di errore HTTP. In questo modo se il tuo cliente vuole usare XML invece di JSON, non hai più lavoro da fare. –