私のプロジェクトにあるクラスの1つ、たとえばAC
は、Address
タイプのプロパティIPEndPoint
を持っています。このタイプは、IPAddress
と同様に、デフォルトでJSONにシリアル化できないことで有名です。クラスをシリアル化する必要があったので、2つのカスタムコンバーターIPAddressConverter
とIPEndPointConverter
を実装しました。 Newtonsoftにこれら2つのコンバーターを使用させるために、このクラスを作成しました。
public sealed class CustomSettings : JsonSerializerSettings
{
public CustomSettings() : base()
{
this.Converters.Add(new IPAddressConverter());
this.Converters.Add(new IPEndPointConverter());
this.TypeNameHandling = TypeNameHandling.Auto;
}
}
..これをMain
で次のように使用します。
Newtonsoft.Json.JsonConvert.DefaultSettings = () => new CustomSettings();
プログラムにAPIを追加しようとしています。 .Net Core Web APIプロジェクトを作成し、それをプログラムに正常に統合しました。しかし、リクエスト本文からJSON形式でAC
のインスタンスを必要とするPOSTメソッドを記述しようとしたときに問題が発生しました。シリアライザはIPEndPoint
、つまりAC
の値は常にnull
でした。
.Net Core APIの構成に関する情報はかなりまばらです。同じ設定をMVCのシリアライザーに渡す方法を誰かに教えてもらえますか?
[〜#〜]編集[〜#〜]
私は方法を見つけました。 ConfigureServices
メソッドでJSONオプションを設定できることがわかりました。
次のようにして、プログラムの残りの部分と同じ方法でMVCのシリアライザーの設定を変更しようとしました。
services.AddMvc().AddJsonOptions(options => options.SerializerSettings = new CustomSettings());
ただし、options.SerializerSettings
は読み取り専用であるため、これは機能しません。
私はcouldコンバータを1つずつ渡しますが、すべてが1つの場所(CustomSettings
クラス)から管理された方がいいです。 。これは可能ですか?
構成したいものをカプセル化する拡張メソッドを作成する
public static void AddCustomSettings(this Newtonsoft.Json.JsonSerializerSettings settings) {
settings.Converters.Add(new IPAddressConverter());
settings.Converters.Add(new IPEndPointConverter());
settings.TypeNameHandling = TypeNameHandling.Auto;
}
そしてConfigureServices
に設定します
services.AddJsonOptions(options => options.SerializerSettings.AddCustomSettings());