ile özellikleri yoksayma System.Text.Json
C# nesneleri JavaScript Nesne Gösterimi'ne (JSON) serileştirilirken, varsayılan olarak tüm genel özellikler serileştirilir. Bunlardan bazılarının sonuçta elde edilen JSON'da görünmesini istemiyorsanız, birkaç seçeneğiniz vardır. Bu makalede, çeşitli ölçütlere göre özellikleri yoksaymayı öğreneceksiniz:
- Tek tek özellikler
- Tüm salt okunur özellikler
- Tüm null-değer özellikleri
- Tüm varsayılan değer özellikleri
Tek tek özellikleri yoksay
Tek tek özellikleri yoksaymak için [JsonIgnore] özniteliğini kullanın.
Aşağıdaki örnekte seri hale getirecek bir tür gösterilmektedir. Ayrıca JSON çıkışını da gösterir:
public class WeatherForecastWithIgnoreAttribute
{
public DateTimeOffset Date { get; set; }
public int TemperatureCelsius { get; set; }
[JsonIgnore]
public string? Summary { get; set; }
}
Public Class WeatherForecastWithIgnoreAttribute
Public Property [Date] As DateTimeOffset
Public Property TemperatureCelsius As Integer
<JsonIgnore>
Public Property Summary As String
End Class
{
"Date": "2019-08-01T00:00:00-07:00",
"TemperatureCelsius": 25,
}
[JsonIgnore] özniteliğinin Condition
özelliğini ayarlayarak koşullu dışlama belirtebilirsiniz. sabit JsonIgnoreCondition listesi aşağıdaki seçenekleri sağlar:
Always
- Özelliği her zaman yoksayılır. BelirtilmezseCondition
, bu seçenek varsayılır.Never
- özelliği, ve genel ayarlarından bağımsız olarak her zaman serileştirilir veIgnoreReadOnlyFields
seri durumdanDefaultIgnoreCondition
IgnoreReadOnlyProperties
çıkarılır.WhenWritingDefault
- Bir başvuru türü , null atanabilir bir değer türünull
veya bir değer türüysenull
default
, özelliği serileştirmede yoksayılır.WhenWritingNull
- Özellik, bir başvuru türü veya null atanabilir bir değer türüysenull
null
serileştirmede yoksayılır.
Aşağıdaki örnekte [JsonIgnore] özniteliğinin özelliğinin kullanımı gösterilmektedirCondition
:
using System.Text.Json;
using System.Text.Json.Serialization;
namespace JsonIgnoreAttributeExample
{
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; }
};
public class Program
{
public static void Main()
{
Forecast forecast = new()
{
Date = default,
Summary = null,
TemperatureC = default
};
JsonSerializerOptions options = new()
{
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault
};
string forecastJson =
JsonSerializer.Serialize<Forecast>(forecast,options);
Console.WriteLine(forecastJson);
}
}
}
// Produces output like the following example:
//
//{"TemperatureC":0}
Imports System.Text.Json
Imports System.Text.Json.Serialization
Namespace JsonIgnoreAttributeExample
Public Class Forecast
<JsonIgnore(Condition:=JsonIgnoreCondition.WhenWritingDefault)>
Public Property [Date] As Date
<JsonIgnore(Condition:=JsonIgnoreCondition.Never)>
Public Property TemperatureC As Integer
<JsonIgnore(Condition:=JsonIgnoreCondition.WhenWritingNull)>
Public Property Summary As String
End Class
Public NotInheritable Class Program
Public Shared Sub Main()
Dim forecast1 As New Forecast() With {
.[Date] = CType(Nothing, Date),
.Summary = Nothing,
.TemperatureC = CType(Nothing, Integer)
}
Dim options As New JsonSerializerOptions() With {
.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault
}
Dim forecastJson As String = JsonSerializer.Serialize(forecast1, options)
Console.WriteLine(forecastJson)
End Sub
End Class
End Namespace
' Produces output like the following example:
'
'{"TemperatureC":0}
Tüm salt okunur özellikleri yoksay
Bir özellik, genel bir alıcı içeriyorsa ancak ortak ayarlayıcı içermiyorsa salt okunurdur. Seri hale getirildiğinde tüm salt okunur özellikleri yoksaymak içintrue
, aşağıdaki örnekte gösterildiği gibi değerini olarak ayarlayınJsonSerializerOptions.IgnoreReadOnlyProperties:
var options = new JsonSerializerOptions
{
IgnoreReadOnlyProperties = true,
WriteIndented = true
};
jsonString = JsonSerializer.Serialize(weatherForecast, options);
Dim options As JsonSerializerOptions = New JsonSerializerOptions With {
.IgnoreReadOnlyProperties = True,
.WriteIndented = True
}
jsonString = JsonSerializer.Serialize(weatherForecast, options)
Aşağıdaki örnekte seri hale getirecek bir tür gösterilmektedir. Ayrıca JSON çıkışını da gösterir:
public class WeatherForecastWithROProperty
{
public DateTimeOffset Date { get; set; }
public int TemperatureCelsius { get; set; }
public string? Summary { get; set; }
public int WindSpeedReadOnly { get; private set; } = 35;
}
Public Class WeatherForecastWithROProperty
Public Property [Date] As DateTimeOffset
Public Property TemperatureCelsius As Integer
Public Property Summary As String
Private _windSpeedReadOnly As Integer
Public Property WindSpeedReadOnly As Integer
Get
Return _windSpeedReadOnly
End Get
Private Set(Value As Integer)
_windSpeedReadOnly = Value
End Set
End Property
End Class
{
"Date": "2019-08-01T00:00:00-07:00",
"TemperatureCelsius": 25,
"Summary": "Hot",
}
Bu seçenek yalnızca özellikler için geçerlidir. Alanları serileştirirken salt okunur alanları yoksaymak için genel ayarı kullanınJsonSerializerOptions.IgnoreReadOnlyFields.
Not
Salt okunur koleksiyon türü özellikleri, olarak ayarlanmış olsa JsonSerializerOptions.IgnoreReadOnlyProperties bile seri hale getirilir true
.
Tüm null-değer özelliklerini yoksay
Tüm null-değer özelliklerini yoksaymak WhenWritingNulliçin, aşağıdaki örnekte gösterildiği gibi özelliğini olarak ayarlayınDefaultIgnoreCondition:
using System.Text.Json;
using System.Text.Json.Serialization;
namespace IgnoreNullOnSerialize
{
public class Forecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public string? Summary { get; set; }
};
public class Program
{
public static void Main()
{
Forecast forecast = new()
{
Date = DateTime.Now,
Summary = null,
TemperatureC = default
};
JsonSerializerOptions options = new()
{
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
};
string forecastJson =
JsonSerializer.Serialize<Forecast>(forecast, options);
Console.WriteLine(forecastJson);
}
}
}
// Produces output like the following example:
//
//{"Date":"2020-10-30T10:11:40.2359135-07:00","TemperatureC":0}
Imports System.Text.Json
Namespace IgnoreNullOnSerialize
Public Class Forecast
Public Property [Date] As Date
Public Property TemperatureC As Integer
Public Property Summary As String
End Class
Public NotInheritable Class Program
Public Shared Sub Main()
Dim forecast1 As New Forecast() With
{
.[Date] = Date.Now,
.Summary = Nothing,
.TemperatureC = CType(Nothing, Integer)
}
Dim options As New JsonSerializerOptions
Dim forecastJson As String = JsonSerializer.Serialize(forecast1, options)
Console.WriteLine(forecastJson)
End Sub
End Class
End Namespace
' Produces output like the following example:
'
'{"Date":"2020-10-30T10:11:40.2359135-07:00","TemperatureC":0}
Tüm varsayılan değer özelliklerini yoksay
Değer türü özelliklerindeki varsayılan değerlerin serileştirilmesini önlemek için, aşağıdaki örnekte gösterildiği gibi özelliğini WhenWritingDefaultolarak ayarlayınDefaultIgnoreCondition:
using System.Text.Json;
using System.Text.Json.Serialization;
namespace IgnoreValueDefaultOnSerialize
{
public class Forecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public string? Summary { get; set; }
};
public class Program
{
public static void Main()
{
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);
}
}
}
// Produces output like the following example:
//
//{ "Date":"2020-10-21T15:40:06.8920138-07:00"}
Imports System.Text.Json
Imports System.Text.Json.Serialization
Namespace IgnoreValueDefaultOnSerialize
Public Class Forecast
Public Property [Date] As Date
Public Property TemperatureC As Integer
Public Property Summary As String
End Class
Public NotInheritable Class Program
Public Shared Sub Main()
Dim forecast1 As New Forecast() With
{.[Date] = Date.Now,
.Summary = Nothing,
.TemperatureC = CType(Nothing, Integer)
}
Dim options As New JsonSerializerOptions() With {
.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault
}
Dim forecastJson As String = JsonSerializer.Serialize(forecast1, options)
Console.WriteLine(forecastJson)
End Sub
End Class
End Namespace
' Produces output like the following example:
'
'{ "Date":"2020-10-21T15:40:06.8920138-07:00"}
Bu WhenWritingDefault ayar, null-değer başvuru türü ve null atanabilir değer türü özelliklerinin seri hale getirilmesini de engeller.