Wie geben Sie im ASP.NET Core 3.0-Web-API-Projekt die Serialisierungsoptionen von System.Text.Json an , um die Pascal Case-Eigenschaften automatisch in Camel Case zu serialisieren / deserialisieren und umgekehrt?
Bei einem Modell mit Pascal Case-Eigenschaften wie:
public class Person
{
public string Firstname { get; set; }
public string Lastname { get; set; }
}
Und Code zur Verwendung von System.Text.Json zum Deserialisieren einer JSON-Zeichenfolge in den Person
Klassentyp:
var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var person = JsonSerializer.Deserialize<Person>(json);
Deserialisiert nicht erfolgreich, es sei denn, JsonPropertyName wird für jede Eigenschaft wie folgt verwendet:
public class Person
{
[JsonPropertyName("firstname")
public string Firstname { get; set; }
[JsonPropertyName("lastname")
public string Lastname { get; set; }
}
Ich habe Folgendes versucht startup.cs
, aber es hat nicht geholfen, wenn es noch benötigt wird 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;
});
Wie können Sie die Serialisierung / Deserialisierung von Camel Case in ASP.NET Core 3.0 mithilfe des neuen System.Text.Json-Namespace festlegen?
Vielen Dank!
quelle
In
startup.cs
:Dies bedeutet, dass Sie newtonsoft.json nicht importieren müssen.
Die einzige andere Option für
options.JsonSerializerOptions.PropertyNamingPolicy
istJsonNamingPolicy.CamelCase
. Es scheint keine anderenJsonNamingPolicy
Namensrichtlinienoptionen wie snake_case oder PascalCase zu geben.quelle
Sie können verwenden
PropertyNameCaseInsensitive
. Sie müssen es als Parameter an den Deserializer übergeben.welche (aus den Dokumenten ):
Daher wird weder camelCase noch PascalCase angegeben, es wird jedoch ein Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung verwendet. Nicht sicher, ob dies Ihren Anforderungen entspricht.
Hinweis: Ich konnte diese Anwendung in einer Konsolen-App nicht breit einstellen. Wie in angemerkt Kahbazi Antwort
services.AddMvc().AddJsonOptions
undservices.AddControllers().AddJsonOptions
wird Json für MVC und WebAPI nur Controller konfigurieren (dh nicht konfiguriert werden Json Einstellungen Anwendung breit in einer Konsolenanwendung, zum Beispiel). Im Folgenden wird nur System.Text.Json für Json konfiguriert, das über einen Controller-Endpunkt übergeben wird:quelle
Wenn Sie eine CamelCase-Serialisierung wünschen, verwenden Sie diesen Code in Startup.cs : (zum Beispiel Vorname)
Wenn Sie eine PascalCase-Serialisierung wünschen, verwenden Sie diesen Code in Startup.cs : (zum Beispiel Vorname)
quelle
Sie können es weiterhin anwendungsweit festlegen, indem Sie das Microsoft.AspNetCore.Mvc.NewtonsoftJson Nuget-Paket installieren, mit dem Sie die vorherige Json-Serializer-Implementierung verwenden können:
Credits to Poke, Antwort hier gefunden: Wo ist IMvcBuilder AddJsonOptions in .Net Core 3.0 geblieben?
quelle