Sto provando a serializzare oggetti come JSON con MVC4 WebAPI (RTM - ho appena installato VS2012 RTM oggi ma ho riscontrato questo problema ieri nella RC) e mi piacerebbe per tutti i null da rendere nell'output JSON. Ti piace questa:Impossibile rendere MVC4 WebApi include campi null in JSON
[{"Id": 1, "PropertyThatMightBeNull": null},{"Id":2, "PropertyThatMightBeNull": null}]
Ma che cosa Im ottenendo è
[{"Id":1},{"Id":2}]
ho trovato questo Q/A WebApi doesnt serialize null fields ma la risposta o non funziona per me o mi sto riuscendo a cogliere in cui per mettere la risposta.
Ecco che cosa ho provato:
In Application_Start di Global.asax.cs, ho aggiunto:
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include; json.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include;
Ciò non (sembra) di errore e sembra eseguire effettivamente basato sul guardare alla prossima cosa che ho provato.
In un metodo di controllo (in una sottoclasse di ApiController), aggiunto:
base.Configuration.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include; base.Configuration.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include;
dico # 1 eseguita perché entrambi i valori in # 2 sono stati già fissati prima quelle linee correvano come ho intensificato attraverso.
Con una mossa disperata (perché io davvero non voglio per decorare ogni proprietà di ogni oggetto) ho provato ad aggiungere questo attrib per una proprietà che era nullo e assente:
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Include, NullValueHandling = NullValueHandling.Include)]
Tutto tre producono lo stesso JSON con proprietà nulle omesse.
Note aggiuntive:
- in corso a livello locale in IIS (provato costruito in troppo), Windows 7, VS2012 RTM.
- metodi controller restituiscono List - ha cercato IEnumerable troppo
- Gli oggetti che sto cercando di serializzare sono pocos.
scopre che ha fatto il lavoro - o dovrebbe avere. Pubblicherò quello che stavo rovinando per darmi una dose piena di umiltà :) – AndrewFreese
Non posso ringraziarti abbastanza per questa risposta. – Simian
La prima variante funziona anche (senza creare una nuova istanza delle impostazioni del serializzatore), purché sia DefaultValueHandling AND NullValueHandling ai rispettivi rispettivi valori Includi – Masterfu