Jsonデータを生成する際に無視するフィールドを指定する

2021-05-23
Json

おはようございます、今朝はJsonデータを生成する際に無視するフィールドを指定する方法を紹介します。 nullを渡すのでなく、フィールド自体をJsonデータで生成しない方法です。

こちらを参照しました。

System.Text.Json でプロパティを無視する方法

モデルクラスでは定義しているがJsonで生成したくない場合

public class WeatherForecastWithIgnoreAttribute
{
    public DateTimeOffset Date { get; set; }
    public int TemperatureCelsius { get; set; }
    [JsonIgnore]
    public string Summary { get; set; }
}

上記の場合の出力

```csharp
{
  "Date": "2019-08-01T00:00:00-07:00",
  "TemperatureCelsius": 25,
}

常に無視ではなく、コンディションを指定したい場合は下記のオプションがあります。

  • Always - プロパティを常に無視します。 Condition を指定しないと、このオプションが想定されます。
  • Never - グローバル設定 DefaultIgnoreCondition、IgnoreReadOnlyProperties、IgnoreReadOnlyFields に関係なく、プロパティは常にシリアル化および逆シリアル化されます。
  • WhenWritingDefault - プロパティが参照型 null、null 許容値型 null、または値型 default の場合、シリアル化時に無視されます。
  • WhenWritingNull - プロパティが参照型 null または null 許容値型 null の場合、シリアル化時に無視されます。

public class Forecast
    {
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
        public DateTime Date { get; set; }

        [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
        public int TemperatureC { get; set; }

        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public string? Summary { get; set; }
    };

モデルクラスで定義されていなくても、下記のようにシリアライズする際にオプションとして指定することもできます。

 Forecast forecast = new()
            {
                Date = DateTime.Now,
                Summary = null,
                TemperatureC = default
            };

            JsonSerializerOptions options = new()
            {
                DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault
            };

            string forecastJson =
                JsonSerializer.Serialize<Forecast>(forecast, options);

            Console.WriteLine(forecastJson);
公開日: 2021-05-23