web-dev-qa-db-ja.com

Asp.Net Core MVC Jsonオプションを設定する

私のプロジェクトにあるクラスの1つ、たとえばACは、AddressタイプのプロパティIPEndPointを持っています。このタイプは、IPAddressと同様に、デフォルトでJSONにシリアル化できないことで有名です。クラスをシリアル化する必要があったので、2つのカスタムコンバーターIPAddressConverterIPEndPointConverterを実装しました。 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クラス)から管理された方がいいです。 。これは可能ですか?

12
stybl

構成したいものをカプセル化する拡張メソッドを作成する

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());
10
Nkosi