W projekcie ASP.NET Core 3.0 Web API, jak określasz opcje serializacji System.Text.Json, aby serializować / deserializować właściwości sprawy Pascala do Camel Case i odwrotnie automatycznie?
Biorąc pod uwagę model z właściwościami Pascal Case, takimi jak:
public class Person
{
public string Firstname { get; set; }
public string Lastname { get; set; }
}
I kod do użycia System.Text.Json do deserializacji ciągu JSON do typu Person
klasy:
var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var person = JsonSerializer.Deserialize<Person>(json);
Nie można pomyślnie deserializować, chyba że JsonPropertyName jest używana z każdą właściwością, taką jak:
public class Person
{
[JsonPropertyName("firstname")
public string Firstname { get; set; }
[JsonPropertyName("lastname")
public string Lastname { get; set; }
}
Próbowałem następujących startup.cs
rzeczy, ale nie pomogło to w dalszym ciągu potrzebować JsonPropertyName
:
services.AddMvc().AddJsonOptions(options =>
{
options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});
// also the following given it's a Web API project
services.AddControllers().AddJsonOptions(options => {
options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});
Jak ustawić serializację / deserializację Camel Case w programie ASP.NET Core 3.0 za pomocą nowej przestrzeni nazw System.Text.Json?
Dzięki!
źródło
W
startup.cs
:Oznacza to, że nie musisz importować pliku newtonsoft.json.
Jedyną inną opcją
options.JsonSerializerOptions.PropertyNamingPolicy
jestJsonNamingPolicy.CamelCase
. Wydaje się, że nie ma żadnych innychJsonNamingPolicy
opcji polityki nazewnictwa, takich jak snake_case lub PascalCase.źródło
Możesz użyć
PropertyNameCaseInsensitive
. Musisz przekazać go jako parametr do deserializatora.który (z dokumentów ):
Nie określa więc camelCase ani PascalCase, ale użyje porównania bez rozróżniania wielkości liter. Nie jestem pewien, czy spełnia twoje wymagania.
Uwaga: nie byłem w stanie ustawić tej aplikacji szeroko w aplikacji konsolowej. Jak wskazano w odpowiedzi Kahbazi za
services.AddMvc().AddJsonOptions
iservices.AddControllers().AddJsonOptions
skonfiguruje json tylko dla kontrolerów MVC i WebAPI (czyli nie będzie konfigurowanie aplikacji JSON ustawieniach szerokiego w app konsoli, na przykład). Poniżej skonfigurujemy tylko System.Text.Json dla Json przekazany przez punkt końcowy kontrolera:źródło
Jeśli chcesz serializować CamelCase, użyj tego kodu w Startup.cs : (na przykład firstName)
Jeśli chcesz serializacji PascalCase, użyj tego kodu w Startup.cs : (na przykład FirstName)
źródło
Nadal możesz ustawić tę aplikację na całą instalację, instalując pakiet Microsoft.AspNetCore.Mvc.NewtonsoftJson Nuget, który umożliwia korzystanie z poprzedniej implementacji serializatora Json:
Kredyty dla Poke, odpowiedź można znaleźć tutaj: Gdzie wszedł IMvcBuilder AddJsonOptions w .Net Core 3.0?
źródło