UPDATE [2019-12-23]:一部ボーカルによる コミュニティの入力 この問題 ロードマップに追加されました for .NET 5.0。
UPDATE [2019-10-10]:この動作がSystem.Text.Json.JsonSerializer
先に進む未解決のGitHubの問題 =Chris Yungmann が指摘し、量り込みます。
これの代わりに:
JsonSerializerOptions options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
// etc.
};
JsonSerializer.Deserialize<SomeObject>(someJsonString, options);
私はこのようなことをしたいと思います:
// This property is a pleasant fiction
JsonSerializer.DefaultSettings = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
// etc.
};
// This uses my options
JsonSerializer.Deserialize<SomeObject>(someJsonString);
// And somewhere else in the same codebase...
// This also uses my options
JsonSerializer.Deserialize<SomeOtherObject>(someOtherJsonString);
最も望ましいのは、JsonSerializerOptions
のインスタンスを渡さずに、ルールではなく例外をオーバーライドすることです。
this q&a に示されているように、これはJson.Netの便利な機能です。 System.Text.Json
の- ドキュメント と.NET Coreの このGitHubリポジトリ を調べました。そして これ 。
.NET Core 3でJSONシリアル化のデフォルトを管理するための類似物はないようです。または、見落としているのですか?
いいえ、JsonSerializerOptions
は デフォルトオプション を公開しません。特定のWebフレームワークを使用している場合、それを介して(逆)シリアル化設定を指定する方法があるかもしれません。それ以外の場合は、独自の便利なメソッドを作成することをお勧めします。
この未解決の問題 も参照してください。
拡張メソッドを作成できます。 ここに例があります
私は特別な設定を構築する必要があるのとは別の方法を使用するので、すべての設定が1つの場所にあり、簡単に再利用できます。
public static class DeserializeExtensions
{
private static JsonSerializerOptions defaultSerializerSettings = new JsonSerializerOptions();
// set this up how you need to!
private static JsonSerializerOptions featureXSerializerSettings = new JsonSerializerOptions();
public static T Deserialize<T>(this string json)
{
return JsonSerializer.Deserialize<T>(json, defaultSerializerSettings);
}
public static T DeserializeCustom<T>(this string json, JsonSerializerOptions settings)
{
return JsonSerializer.Deserialize<T>(json, settings);
}
public static T DeserializeFeatureX<T>(this string json)
{
return JsonSerializer.Deserialize<T>(json, featureXSerializerSettings);
}
}
次に、リテラルでも変数でも、文字列のメソッドとして呼び出します。
Car result = @"{""Wheels"": 4, ""Doors"": 2}".DeserializeFeatureX<Car>();