Próbuję serializować obiekty jako JSON z MVC4 WebAPI (RTM - właśnie zainstalowałem VS2012 RTM dzisiaj, ale miałem ten problem wczoraj w RC) i chciałbym wszystkie wartości null, które mają być renderowane w wyjściu JSON. Jak to:Nie mogę uczynić z WebApi MVC4 pól NULL w JSON
[{"Id": 1, "PropertyThatMightBeNull": null},{"Id":2, "PropertyThatMightBeNull": null}]
ale co Im coraz to
[{"Id":1},{"Id":2}]
Znalazłem ten Q/A WebApi doesnt serialize null fields ale odpowiedź albo nie działa na mnie albo ja braku uchwycić gdzie aby umieścić odpowiedź.
Oto co próbowałem:
W Global.asax.cs za Application_Start, dodałem:
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include; json.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include;
nie (do) wydają błąd i rzeczywiście wydaje się wykonać w oparciu o spojrzenie na następną rzecz, którą próbowałem.
W sposobie kontrolera (w podklasie ApiController) dodaje:
base.Configuration.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include; base.Configuration.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include;
powiedzieć 1 wykonany, ponieważ obie wartości w # 2 były już ustawione przed te linie ran jak przeszedł przez.
W ruch desperacji (bo naprawdę nie chcemy ozdobić każdą właściwość każdego obiektu) Próbowałem dodanie tego attrib do nieruchomości, która była nieważna i nieobecny:
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Include, NullValueHandling = NullValueHandling.Include)]
Wszystko trzy wytwarzają ten sam JSON z pominiętymi właściwościami pustymi.
Dodatkowe uwagi:
- działa lokalnie w IIS (próbował zbudowany w zbyt), Windows 7 RTM VS2012.
- Powrót do listy metod sterowania Lista wypróbowanych IEnumerable też
- Obiekty, które próbuję serializować, to pocos.
Okazuje się, że nie działa - czy powinien mieć. Opublikuję to, co robiłem, aby dać sobie pełną dawkę pokory :) – AndrewFreese
Nie mogę ci wystarczająco podziękować za tę odpowiedź. – Simian
Pierwszy wariant również działa (bez tworzenia nowej instancji ustawień serializera), o ile ustawisz zarówno DefaultValueHandling, jak i NullValueHandling na odpowiednie wartości Uwzględnij – Masterfu