Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Beim Serialisieren von C#-Objekten in JavaScript Object Notation (JSON) werden standardmäßig alle öffentlichen Eigenschaften serialisiert. Wenn einige davon nicht im resultierenden JSON angezeigt werden sollen, haben Sie mehrere Optionen. In diesem Artikel erfahren Sie, wie Sie Eigenschaften basierend auf verschiedenen Kriterien ignorieren:
- Einzelne Eigenschaften
- Alle schreibgeschützten Eigenschaften
- Alle Nullwerteigenschaften
- Alle Standardwerteigenschaften
Einzelne Eigenschaften ignorieren
Verwenden Sie das Attribut [JsonIgnore], um einzelne Eigenschaften zu ignorieren.
Das folgende Beispiel zeigt einen Typ, der serialisiert werden soll. Außerdem wird die JSON-Ausgabe angezeigt:
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,
}
Sie können bedingten Ausschluss angeben, indem Sie die Eigenschaft des [JsonIgnore] -Attributs Condition
festlegen. Die JsonIgnoreCondition Enumeration bietet die folgenden Optionen:
-
Always
- Die Eigenschaft wird immer ignoriert. Wenn keineCondition
Angabe erfolgt, wird diese Option angenommen. -
Never
- Die Eigenschaft wird immer serialisiert und deserialisiert, unabhängig von den globalenDefaultIgnoreCondition
,IgnoreReadOnlyProperties
undIgnoreReadOnlyFields
Einstellungen. -
WhenWritingDefault
- Die Eigenschaft wird bei der Serialisierung ignoriert, wenn es sich um einen Verweistypnull
, einen Nullwerttypnull
oder einen Werttypdefault
handelt. -
WhenWritingNull
- Die Eigenschaft wird bei der Serialisierung ignoriert, wenn es sich um einen Verweistypnull
oder einen Nullwerttypnull
handelt.
Das folgende Beispiel veranschaulicht die Verwendung der Eigenschaft des [JsonIgnore]-Attributs Condition
.
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 Run()
{
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}
Alle schreibgeschützten Eigenschaften ignorieren
Eine Eigenschaft ist schreibgeschützt, wenn sie einen öffentlichen Getter, aber keinen öffentlichen Setter enthält. Wenn Sie alle schreibgeschützten Eigenschaften beim Serialisieren ignorieren möchten, legen Sie die JsonSerializerOptions.IgnoreReadOnlyProperties Eigenschaft auf " true
, wie im folgenden Beispiel gezeigt, fest:
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)
Das folgende Beispiel zeigt einen Typ, der serialisiert werden soll. Außerdem wird die JSON-Ausgabe angezeigt:
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",
}
Diese Option gilt nur für Eigenschaften. Verwenden Sie die globale Einstellung, um schreibgeschützte Felder beim Serialisieren von JsonSerializerOptions.IgnoreReadOnlyFields Feldern zu ignorieren.
Hinweis
Schreibgeschützte Eigenschaften von Sammlungstypen werden weiterhin serialisiert, auch wenn JsonSerializerOptions.IgnoreReadOnlyProperties auf true
gesetzt ist.
Alle Nullwerteigenschaften ignorieren
Wenn Sie alle Nullwerteigenschaften ignorieren möchten, legen Sie die DefaultIgnoreCondition Eigenschaft wie im folgenden Beispiel gezeigt auf fest WhenWritingNull:
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 Run()
{
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}
Alle Standardwerteigenschaften ignorieren
Um die Serialisierung von Standardwerten in Werttypeigenschaften zu verhindern, legen Sie die DefaultIgnoreCondition Eigenschaft auf WhenWritingDefault, wie im folgenden Beispiel gezeigt:
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 Run()
{
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"}
Die WhenWritingDefault Einstellung verhindert auch die Serialisierung von Null-Wert-Bezugstyp- und Nullwerte-Werttypeigenschaften.