Formatieren von Antwortdaten in Web-APIs in ASP.NET Core

ASP.NET Core MVC unterstützt das Formatieren von Antwortdaten in angegebenen Formaten oder als Reaktion auf die Anforderung eines Clients.

Formatspezifische Aktionsergebnisse

Einige Aktionsergebnistypen sind für ein bestimmtes Format spezifisch, wie z.B. JsonResult und ContentResult. Aktionen können Ergebnisse zurückgeben, die immer ein angegebenes Format verwenden, wobei die Anforderung eines Clients für ein anderes Format ignoriert wird. Bei der Rückgabe JsonResult werden z. B. ON-formatierte Daten zurückgegeben JS, und die ContentResult Rückgabe gibt Zeichenfolgendaten im Klartextformat zurück.

Zum Zurückgeben eines bestimmten Typs ist keine Aktion erforderlich. ASP.NET Core unterstützt jeden Objektrückgabewert. Ergebnisse von Aktionen, die Objekte zurückgeben, die keine IActionResult Typen sind, werden mithilfe der entsprechenden IOutputFormatter Implementierung serialisiert. Weitere Informationen finden Sie unter Rückgabetypen der Controlleraktion in ASP.NET Core Web-API.

Standardmäßig gibt die integrierte Hilfsmethode ControllerBase.Ok ON-formatierte Daten zurück JS:

[HttpGet]
public IActionResult Get() =>
    Ok(_todoItemStore.GetList());

Der Beispielcode gibt eine Liste von Aufgabenelementen zurück. Wenn Sie die F12-Browserentwicklertools oder Postman mit dem vorherigen Code verwenden, wird Folgendes angezeigt:

  • Der Antwortheader, der content-type:application/json; charset=utf-8enthält.
  • Die Anforderungsheader. Beispiel: Der Header Accept. Der Accept-Header wird vom vorangehenden Code ignoriert.

Wenn Sie Daten im Textformat zurückgeben möchten, verwenden Sie ContentResult und das Content-Hilfsprogramm:

[HttpGet("Version")]
public ContentResult GetVersion() =>
    Content("v1.0.0");

Im obigen Code wird text/plain als Content-Type zurückgegeben.

Bei Aktionen mit mehreren Rückgabetypen wird IActionResult zurückgegeben. Beispiel: Zurückgeben unterschiedlicher HTTP-Statuscodes basierend auf dem Ergebnis des Vorgangs.

Inhaltsaushandlung

Eine Inhaltsaushandlung tritt auf, wenn der Client einen Accept-Header angibt. Das Standardformat, das von ASP.NET Core verwendet wird, ist JSON. Für die Inhaltsaushandlung gilt:

  • Sie wird durch ObjectResult implementiert.
  • Sie ist in die Statuscode-spezifischen Aktionsergebnisse integriert, die von den Hilfsmethoden zurückgegeben werden. Die Hilfsmethoden für Aktionsergebnisse basieren auf ObjectResult.

Wenn ein Modelltyp zurückgegeben wird, ist ObjectResultder Rückgabetyp .

Die folgende Aktionsmethode verwendet die Hilfsmethoden Ok und NotFound:

[HttpGet("{id:long}")]
public IActionResult GetById(long id)
{
    var todo = _todoItemStore.GetById(id);

    if (todo is null)
    {
        return NotFound();
    }

    return Ok(todo);
}

Standardmäßig unterstützt ASP.NET Core die folgenden Medientypen:

  • application/json
  • text/json
  • text/plain

Tools wie Fiddler oder Postman können den Accept-Anforderungsheader festlegen, um das Rückgabeformat anzugeben. Wenn der Accept-Header einen vom Server unterstützten Typ enthält, wird dieser Typ zurückgegeben. Der nächste Abschnitt zeigt, wie zusätzliche Formatierer hinzugefügt werden.

Controlleraktionen können POCOs (Plain Old CLR Objects) zurückgeben. Wenn ein POCO zurückgegeben wird, erstellt die Runtime automatisch ein ObjectResult, das das Objekt umschließt. Der Client empfängt das formatierte serialisierte Objekt. Wenn das zurückgegebene Objekt null ist, wird eine 204 No Content-Antwort zurückgegeben.

Im folgenden Beispiel wird ein Objekttyp zurückgegeben:

[HttpGet("{id:long}")]
public TodoItem? GetById(long id) =>
    _todoItemStore.GetById(id);

Im vorherigen Code gibt eine Anforderung für ein gültiges Todo-Element eine 200 OK Antwort zurück. Eine Anforderung für ein ungültiges Todo-Element gibt eine 204 No Content Antwort zurück.

Der Accept-Header

Eine Aushandlung des Inhalts findet statt, wenn in der Anforderung ein Accept-Header angezeigt wird. Wenn eine Anforderung einen Accept-Header enthält, führt ASP.NET Core Folgendes aus:

  • Die Medientypen im Accept-Header werden in der bevorzugten Reihenfolge aufgelistet.
  • Es wird versucht, einen Formatierer zu finden, der eine Antwort in einem der angegebenen Formate erzeugen kann.

Wenn kein Formatierer gefunden wird, der die Clientanforderung erfüllen kann, führt ASP.NET Core Folgendes aus:

  • Gibt zurück 406 Not Acceptable , wenn MvcOptions.ReturnHttpNotAcceptable auf trueoder festgelegt ist.
  • Es wird versucht, den ersten Formatierer zu finden, der eine Antwort erzeugen kann.

Wenn kein Formatierer für das angeforderte Format konfiguriert wurde, wird der erste Formatierer verwendet, der das Objekt formatieren kann. Wenn in der Anforderung kein Accept-Header vorhanden ist, gilt Folgendes:

  • Der erste Formatierer, der das Objekt verarbeiten kann, wird zum Serialisieren der Antwort verwendet.
  • Es findet keine Aushandlung statt. Der Server bestimmt, welches Format zurückgegeben werden soll.

Enthält der Accept-Header */*, wird der Header ignoriert, es sei denn, RespectBrowserAcceptHeader ist in MvcOptions auf TRUE festgelegt.

Browser und Inhaltsaushandlung

Im Gegensatz zu typischen API-Clients, stellen Webbrowser Accept-Header bereit. Webbrowser geben viele Formate an, einschließlich Wildcards. Wenn das Framework erkennt, dass eine Anforderung von einem Browser stammt, wird standardmäßig Folgendes ausgeführt:

  • Der Accept-Header wird ignoriert.
  • Der Inhalt wird in JSON zurückgegeben, sofern nicht anders konfiguriert.

Dieser Ansatz bietet eine konsistentere Erfahrung in allen Browsern bei der Nutzung von APIs.

Legen Sie die -Eigenschaft auf fest, um eine App so truezu konfigurieren, dass browser RespectBrowserAcceptHeader accept headers berücksichtigt werden:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers(options =>
{
    options.RespectBrowserAcceptHeader = true;
});

Konfigurieren von Formatierern

Apps, die zusätzliche Formate unterstützen müssen, können die entsprechenden NuGet-Pakete hinzufügen und die Unterstützung konfigurieren. Es gibt unterschiedliche Formatierungsprogramme für Ein- und für Ausgaben. Eingabeformatierer werden von der Modellbindung verwendet. Ausgabeformatierer werden zum Formatieren von Antworten verwendet. Informationen zum Erstellen eines benutzerdefinierten Formatierers finden Sie unter Benutzerdefinierte Formatierer.

Hinzufügen von Unterstützung für das XML-Format

Rufen AddXmlSerializerFormattersSie zum Konfigurieren von XML-Formatierern auf, die mit XmlSerializerimplementiert wurden:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers()
    .AddXmlSerializerFormatters();

Bei Verwendung dieses Codes geben Controllermethoden das geeignete Format basierend auf dem Accept-Header der Anforderung zurück.

Konfigurieren von System.Text.Json-basierten Formatierern

Verwenden Microsoft.AspNetCore.Mvc.JsonOptions.JsonSerializerOptionsSie , um Features für die System.Text.Json-basierten Formatierer zu konfigurieren. Der folgende hervorgehobene Code konfiguriert die PascalCase-Formatierung anstelle der standardmäßigen camelCase-Formatierung:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.PropertyNamingPolicy = null;
    });

Die folgende Aktionsmethode ruft auf ControllerBase.Problem , um eine ProblemDetails Antwort zu erstellen:

[HttpGet("Error")]
public IActionResult GetError() =>
    Problem("Something went wrong.");

Eine ProblemDetails Antwort lautet immer camelCase, auch wenn die App das Format auf PascalCase festlegt. ProblemDetails folgt RFC 7807, der Kleinbuchstaben angibt.

Verwenden JsonResultSie , um Ausgabeserialisierungsoptionen für bestimmte Aktionen zu konfigurieren. Beispiel:

[HttpGet]
public IActionResult Get() =>
    new JsonResult(
        _todoItemStore.GetList(),
        new JsonSerializerOptions
        {
            PropertyNamingPolicy = null
        });

Unterstützung für das on-basierte JSFormat hinzufügen Newtonsoft.Json

Die Standardmäßigen JSON-Formatierer verwenden System.Text.Json. Um die Newtonsoft.Json-basierten Formatierer zu verwenden, installieren Sie das Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet-Paket, und konfigurieren Sie es in Program.cs:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers()
    .AddNewtonsoftJson();

Im vorherigen Code konfiguriert der Aufruf von AddNewtonsoftJson die folgenden Web-API-, MVC- und Razor Pages-Features für die Verwendung Newtonsoft.Json:

Einige Features funktionieren mit System.Text.Json-basierten Formatierern möglicherweise nicht gut und erfordern einen Verweis auf die Newtonsoft.Json-basierten Formatierer. Verwenden Sie weiterhin die Newtonsoft.Json-basierten Formatierer, wenn die App:

  • Sie verwendet Newtonsoft.Json-Attribute. Zum Beispiel: [JsonProperty] oder [JsonIgnore].
  • Sie passt die Serialisierungseinstellungen an.
  • Sie nutzt Features, die von Newtonsoft.Json bereitgestellt werden.

Verwenden SerializerSettingsSie zum Konfigurieren von Features für die Newtonsoft.Json-basierten Formatierer :

builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    });

Verwenden JsonResultSie , um Ausgabeserialisierungsoptionen für bestimmte Aktionen zu konfigurieren. Beispiel:

[HttpGet]
public IActionResult GetNewtonsoftJson() =>
    new JsonResult(
        _todoItemStore.GetList(),
        new JsonSerializerSettings
        {
            ContractResolver = new DefaultContractResolver()
        });

Angeben eines Formats

Um Verweisformate einzuschränken, wenden Sie den [Produces]-Filter an. Wie die meisten Filter[Produces] kann im Aktions-, Controller- oder globalen Bereich angewendet werden:

[ApiController]
[Route("api/[controller]")]
[Produces("application/json")]
public class TodoItemsController : ControllerBase

Mit dem oben stehenden [Produces]-Filter wird Folgendes ausgeführt:

  • Erzwingt, dass alle Aktionen innerhalb des Controllers ON-formatierte Antworten für POCOs (Plain Old CLR Objects) oder ObjectResult und die zugehörigen abgeleiteten Typen zurückgebenJS.
  • Gibt JSON-formatierte Antworten zurück, auch wenn andere Formatierer konfiguriert sind und der Client ein anderes Format angibt.

Weitere Informationen finden Sie unter Filter.

Formatierer für besondere Fälle

Einige besondere Fälle werden mithilfe von integrierten Formatierungsprogrammen implementiert. Standardmäßig werden string-Rückgabetypen als text/plain formatiert (bzw. als text/html, wenn sie über den Accept-Header angefordert werden). Dieses Verhalten kann durch Entfernen von StringOutputFormatter gelöscht werden. Formatierer werden in Program.csentfernt. Aktionen mit einem Modellobjekt-Rückgabetyp geben null zurück, wenn der Rückgabewert 204 No Content lautet. Dieses Verhalten kann durch Entfernen von HttpNoContentOutputFormatter gelöscht werden. Der folgende Code entfernt StringOutputFormatter und HttpNoContentOutputFormatter.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers(options =>
{
    // using Microsoft.AspNetCore.Mvc.Formatters;
    options.OutputFormatters.RemoveType<StringOutputFormatter>();
    options.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
});

Ohne geben StringOutputFormatterdie integrierten JSON-Formatierungsformate string Typen zurück. Wenn der integrierte ON-Formatierer JSentfernt wird und ein XML-Formatierer verfügbar ist, gibt der XML-Formatierer string Typen zurück. Andernfalls geben string-Rückgabetypen 406 Not Acceptable zurück.

Ohne HttpNoContentOutputFormatter werden NULL-Objekte mithilfe des konfigurierten Formatierungsprogramms formatiert. Beispiel:

  • Der JSON-Formatierer gibt eine Antwort mit dem Textkörper zurück null.
  • Der XML-Formatierer gibt ein leeres XML-Element mit festgelegtem Attribut xsi:nil="true" zurück.

Zuordnung des Antwortformats durch URLs

Clients können in der URL ein bestimmtes Format anfordern, beispielsweise folgendermaßen:

  • In der Abfragezeichenfolge oder als Teil des Pfads.
  • Durch Verwendung einer formatspezifischen Dateierweiterung wie „.xml“ oder „.json“.

Die Zuordnung des Anforderungspfads sollte in der Route angegeben werden, die die API verwendet. Beispiel:

[ApiController]
[Route("api/[controller]")]
[FormatFilter]
public class TodoItemsController : ControllerBase
{
    private readonly TodoItemStore _todoItemStore;

    public TodoItemsController(TodoItemStore todoItemStore) =>
        _todoItemStore = todoItemStore;

    [HttpGet("{id:long}.{format?}")]
    public TodoItem? GetById(long id) =>
        _todoItemStore.GetById(id);

Die vorangehende Route ermöglicht die Angabe des angeforderten Formats mithilfe einer optionalen Dateierweiterung. Das Attribut [FormatFilter] überprüft, ob in den RouteData ein Formatwert vorhanden ist, und ordnet das Antwortformat beim Erstellen der Antwort dem entsprechenden Formatierer zu.

Route Formatierungsprogramm
/api/todoitems/5 Standard-Ausgabeformatierungsprogramm
/api/todoitems/5.json Der JSON-Formatierer (sofern konfiguriert)
/api/todoitems/5.xml XML-Formatierungsprogramm (falls konfiguriert)

Polymorphe Deserialisierung

Integrierte Funktionen bieten einen begrenzten Funktionsbereich der polymorphen Serialisierung, aber gar keine Unterstützung für Deserialisierung. Die Deserialisierung erfordert einen benutzerdefinierten Konverter. Eine vollständige Stichprobe der polymorphen Deserialisierung finden Sie unter Polymorphe Deserialisierung .

Zusätzliche Ressourcen

ASP.NET Core MVC unterstützt das Formatieren von Antwortdaten. Antwortdaten können mithilfe bestimmter Formate oder durch Übernahme des vom Client angeforderten Formats formatiert werden.

Anzeigen oder Herunterladen von Beispielcode (Vorgehensweise zum Herunterladen)

Formatspezifische Aktionsergebnisse

Einige Aktionsergebnistypen sind für ein bestimmtes Format spezifisch, wie z.B. JsonResult und ContentResult. Aktionen können Ergebnisse zurückgeben, die in einem bestimmten Format formatiert sind, unabhängig von den Clienteinstellungen. Die Rückgabe JsonResult gibt z. B. ON-formatierte Daten zurück JS. Mit ContentResult oder einer Zeichenfolge werden Zeichenfolgendaten in Nur-Text-Format zurückgegeben.

Zum Zurückgeben eines bestimmten Typs ist keine Aktion erforderlich. ASP.NET Core unterstützt jeden Objektrückgabewert. Ergebnisse von Aktionen, die Objekte zurückgeben, die keine IActionResult Typen sind, werden mithilfe der entsprechenden IOutputFormatter Implementierung serialisiert. Weitere Informationen finden Sie unter Rückgabetypen der Controlleraktion in ASP.NET Core Web-API.

Die integrierte Hilfsmethode Ok gibt ON-formatierte Daten zurück JS:

// GET: api/authors
[HttpGet]
public ActionResult Get()
{
    return Ok(_authors.List());
}

Der Beispieldownload gibt die Liste der Autoren zurück. Bei Verwendung der F12-Entwicklertools im Browser oder von Postman mit dem obigen Code gilt Folgendes:

  • Der Antwortheader, der den Inhaltstyp enthält,application/json; charset=utf-8 wird angezeigt.
  • Die Anforderungsheader werden angezeigt. Beispiel: Der Header Accept. Der Accept-Header wird vom vorangehenden Code ignoriert.

Wenn Sie Daten im Textformat zurückgeben möchten, verwenden Sie ContentResult und das Content-Hilfsprogramm:

// GET api/authors/about
[HttpGet("About")]
public ContentResult About()
{
    return Content("An API listing authors of docs.asp.net.");
}

Im obigen Code wird text/plain als Content-Type zurückgegeben. Das Zurückgeben einer Zeichenfolge liefert text/plain als Content-Type:

// GET api/authors/version
[HttpGet("version")]
public string Version()
{
    return "Version 1.0.0";
}

Bei Aktionen mit mehreren Rückgabetypen wird IActionResult zurückgegeben. Beispiel: Die Rückgabe von verschiedenen HTTP-Statuscodes basierend auf dem Ergebnis der ausgeführten Vorgänge.

Inhaltsaushandlung

Eine Inhaltsaushandlung tritt auf, wenn der Client einen Accept-Header angibt. Das Standardformat, das von ASP.NET Core verwendet wird, ist JSON. Für die Inhaltsaushandlung gilt:

  • Sie wird durch ObjectResult implementiert.
  • Sie ist in die Statuscode-spezifischen Aktionsergebnisse integriert, die von den Hilfsmethoden zurückgegeben werden. Die Hilfsmethoden für Aktionsergebnisse basieren auf ObjectResult.

Wenn ein Modelltyp zurückgegeben wird, ist ObjectResultder Rückgabetyp .

Die folgende Aktionsmethode verwendet die Hilfsmethoden Ok und NotFound:

// GET: api/authors/search?namelike=th
[HttpGet("Search")]
public IActionResult Search(string namelike)
{
    var result = _authors.GetByNameSubstring(namelike);
    if (!result.Any())
    {
        return NotFound(namelike);
    }
    return Ok(result);
}

Standardmäßig unterstützt ASP.NET Core application/json-, text/json- und text/plain-Medientypen. Tools wie Fiddler oder Postman können den Accept-Anforderungsheader festlegen, um das Rückgabeformat anzugeben. Wenn der Accept-Header einen vom Server unterstützten Typ enthält, wird dieser Typ zurückgegeben. Der nächste Abschnitt zeigt, wie zusätzliche Formatierer hinzugefügt werden.

Controlleraktionen können POCOs (Plain Old CLR Objects) zurückgeben. Wenn ein POCO zurückgegeben wird, erstellt die Runtime automatisch ein ObjectResult, das das Objekt umschließt. Der Client empfängt das formatierte serialisierte Objekt. Wenn das zurückgegebene Objekt null ist, wird eine 204 No Content-Antwort zurückgegeben.

Zurückgeben eines Objekttyps:

// GET api/authors/RickAndMSFT
[HttpGet("{alias}")]
public Author Get(string alias)
{
    return _authors.GetByAlias(alias);
}

Im oben stehenden Code gibt die Anforderung eines gültigen Autoralias eine 200 OK-Antwort mit den Daten des Autors zurück. Die Anforderung eines ungültigen Alias gibt eine 204 No Content-Antwort zurück.

Der Accept-Header

Eine Aushandlung des Inhalts findet statt, wenn in der Anforderung ein Accept-Header angezeigt wird. Wenn eine Anforderung einen Accept-Header enthält, führt ASP.NET Core Folgendes aus:

  • Die Medientypen im Accept-Header werden in der bevorzugten Reihenfolge aufgelistet.
  • Es wird versucht, einen Formatierer zu finden, der eine Antwort in einem der angegebenen Formate erzeugen kann.

Wenn kein Formatierer gefunden wird, der die Clientanforderung erfüllen kann, führt ASP.NET Core Folgendes aus:

  • Gibt zurück 406 Not Acceptable , wenn MvcOptions.ReturnHttpNotAcceptable auf trueoder festgelegt ist.
  • Es wird versucht, den ersten Formatierer zu finden, der eine Antwort erzeugen kann.

Wenn kein Formatierer für das angeforderte Format konfiguriert wurde, wird der erste Formatierer verwendet, der das Objekt formatieren kann. Wenn in der Anforderung kein Accept-Header vorhanden ist, gilt Folgendes:

  • Der erste Formatierer, der das Objekt verarbeiten kann, wird zum Serialisieren der Antwort verwendet.
  • Es findet keine Aushandlung statt. Der Server bestimmt, welches Format zurückgegeben werden soll.

Enthält der Accept-Header */*, wird der Header ignoriert, es sei denn, RespectBrowserAcceptHeader ist in MvcOptions auf TRUE festgelegt.

Browser und Inhaltsaushandlung

Im Gegensatz zu typischen API-Clients, stellen Webbrowser Accept-Header bereit. Webbrowser geben viele Formate an, einschließlich Wildcards. Wenn das Framework erkennt, dass eine Anforderung von einem Browser stammt, wird standardmäßig Folgendes ausgeführt:

  • Der Accept-Header wird ignoriert.
  • Der Inhalt wird in JSON zurückgegeben, sofern nicht anders konfiguriert.

Dieser Ansatz bietet eine konsistentere Erfahrung in allen Browsern bei der Nutzung von APIs.

Um eine App so zu konfigurieren, dass Accept-Header in Browsern berücksichtigt werden, legen Sie RespectBrowserAcceptHeader auf true fest:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers(options =>
    {
        options.RespectBrowserAcceptHeader = true; // false by default
    });
}

Konfigurieren von Formatierern

Apps, die zusätzliche Formate unterstützen müssen, können die geeigneten NuGet-Pakete hinzufügen und die Unterstützung konfigurieren. Es gibt unterschiedliche Formatierungsprogramme für Ein- und für Ausgaben. Eingabeformatierer werden von der Modellbindung verwendet. Ausgabeformatierer werden zum Formatieren von Antworten verwendet. Informationen zum Erstellen eines benutzerdefinierten Formatierers finden Sie unter Benutzerdefinierte Formatierer.

Hinzufügen von Unterstützung für das XML-Format

XML-Formatierer, die mithilfe von XmlSerializer implementiert wurden, werden durch Aufruf von AddXmlSerializerFormatters konfiguriert:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers()
        .AddXmlSerializerFormatters();
}

Der oben stehende Code serialisiert Ergebnisse mithilfe von XmlSerializer.

Bei Verwendung dieses Codes geben Controllermethoden das geeignete Format basierend auf dem Accept-Header der Anforderung zurück.

Konfigurieren von System.Text.Json basierten Formatierern

Features für die System.Text.Json basierten Formatierer können mit Microsoft.AspNetCore.Mvc.JsonOptions.JsonSerializerOptionskonfiguriert werden. Die Standardformatierung ist camelCase. Der folgende hervorgehobene Code legt die PascalCase-Formatierung fest:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers()
        .AddJsonOptions(options =>
            options.JsonSerializerOptions.PropertyNamingPolicy = null);
}

Die folgende Aktionsmethode ruft auf ControllerBase.Problem , um eine ProblemDetails Antwort zu erstellen:

[HttpGet("error")]
public IActionResult GetError()
{
    return Problem("Something went wrong!");
}

Mit dem obigen Code:

  • https://localhost:5001/WeatherForecast/temperature gibt PascalCase zurück.
  • https://localhost:5001/WeatherForecast/error gibt camelCase zurück. Die Fehlerantwort lautet immer camelCase, auch wenn die App das Format auf PascalCase festlegt. ProblemDetails folgt RFC 7807, der Kleinbuchstaben angibt

Der folgende Code legt PascalCase fest und fügt einen benutzerdefinierten Konverter hinzu:

services.AddControllers().AddJsonOptions(options =>
{
    // Use the default property (Pascal) casing.
    options.JsonSerializerOptions.PropertyNamingPolicy = null;

    // Configure a custom converter.
    options.JsonSerializerOptions.Converters.Add(new MyCustomJsonConverter());
});

Optionen zur Ausgabeserialisierung können aktionsweise mithilfe von JsonResult konfiguriert werden. Beispiel:

public IActionResult Get()
{
    return Json(model, new JsonSerializerOptions
    {
        WriteIndented = true,
    });
}

Unterstützung des Newtonsoft.Json-basierten JSON-Formats hinzugefügt

Die Standardmäßigen JSON-Formatierer basieren auf System.Text.Json. Unterstützung für Newtonsoft.Json basierte Formatierer und Features ist verfügbar, indem Das Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet-Paket installiert und in Startup.ConfigureServiceskonfiguriert wird.

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers()
        .AddNewtonsoftJson();
}

Im vorherigen Code konfiguriert der Aufruf von AddNewtonsoftJson die folgenden Web-API-, MVC- und Razor Pages-Features für die Verwendung Newtonsoft.Json:

Einige Features funktionieren mit System.Text.Json-basierten Formatierern möglicherweise nicht gut und erfordern einen Verweis auf die Newtonsoft.Json-basierten Formatierer. Verwenden Sie weiterhin die Newtonsoft.Json-basierten Formatierer, wenn die App:

  • Sie verwendet Newtonsoft.Json-Attribute. Zum Beispiel: [JsonProperty] oder [JsonIgnore].
  • Sie passt die Serialisierungseinstellungen an.
  • Sie nutzt Features, die von Newtonsoft.Json bereitgestellt werden.

Funktionen für die Newtonsoft.Json-basierten Formatierer können mithilfe von Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.SerializerSettings konfiguriert werden:

services.AddControllers().AddNewtonsoftJson(options =>
{
    // Use the default property (Pascal) casing
    options.SerializerSettings.ContractResolver = new DefaultContractResolver();

    // Configure a custom converter
    options.SerializerSettings.Converters.Add(new MyCustomJsonConverter());
});

Optionen zur Ausgabeserialisierung können aktionsweise mithilfe von JsonResult konfiguriert werden. Beispiel:

public IActionResult Get()
{
    return Json(model, new JsonSerializerSettings
    {
        Formatting = Formatting.Indented,
    });
}

Angeben eines Formats

Um Verweisformate einzuschränken, wenden Sie den [Produces]-Filter an. Wie die meisten Filter[Produces] kann im Aktions-, Controller- oder globalen Bereich angewendet werden:

[ApiController]
[Route("[controller]")]
[Produces("application/json")]
public class WeatherForecastController : ControllerBase
{

Mit dem oben stehenden [Produces]-Filter wird Folgendes ausgeführt:

  • Erzwingt, dass alle Aktionen innerhalb des Controllers ON-formatierte Antworten für POCOs (Plain Old CLR Objects) oder ObjectResult und die zugehörigen abgeleiteten Typen zurückgebenJS.
  • Wenn andere Formatierer konfiguriert sind und der Client ein anderes Format angibt, JSwird ON zurückgegeben.

Weitere Informationen finden Sie unter Filter.

Formatierer für besondere Fälle

Einige besondere Fälle werden mithilfe von integrierten Formatierungsprogrammen implementiert. Standardmäßig werden string-Rückgabetypen als text/plain formatiert (bzw. als text/html, wenn sie über den Accept-Header angefordert werden). Dieses Verhalten kann durch Entfernen von StringOutputFormatter gelöscht werden. Formatierer werden in der ConfigureServices-Methode entfernt. Aktionen mit einem Modellobjekt-Rückgabetyp geben null zurück, wenn der Rückgabewert 204 No Content lautet. Dieses Verhalten kann durch Entfernen von HttpNoContentOutputFormatter gelöscht werden. Der folgende Code entfernt StringOutputFormatter und HttpNoContentOutputFormatter.

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers(options =>
    {
        // requires using Microsoft.AspNetCore.Mvc.Formatters;
        options.OutputFormatters.RemoveType<StringOutputFormatter>();
        options.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
    });
}

Ohne geben StringOutputFormatterdie integrierten JSON-Formatierungsformate string Typen zurück. Wenn der integrierte ON-Formatierer JSentfernt wird und ein XML-Formatierer verfügbar ist, gibt der XML-Formatierer string Typen zurück. Andernfalls geben string-Rückgabetypen 406 Not Acceptable zurück.

Ohne HttpNoContentOutputFormatter werden NULL-Objekte mithilfe des konfigurierten Formatierungsprogramms formatiert. Beispiel:

  • Der JSON-Formatierer gibt eine Antwort mit dem Textkörper zurück null.
  • Der XML-Formatierer gibt ein leeres XML-Element mit festgelegtem Attribut xsi:nil="true" zurück.

Zuordnung des Antwortformats durch URLs

Clients können in der URL ein bestimmtes Format anfordern, beispielsweise folgendermaßen:

  • In der Abfragezeichenfolge oder als Teil des Pfads.
  • Durch Verwendung einer formatspezifischen Dateierweiterung wie „.xml“ oder „.json“.

Die Zuordnung des Anforderungspfads sollte in der Route angegeben werden, die die API verwendet. Beispiel:

[Route("api/[controller]")]
[ApiController]
[FormatFilter]
public class ProductsController : ControllerBase
{
    [HttpGet("{id}.{format?}")]
    public Product Get(int id)
    {

Mit der oben genannten Route kann das angeforderte Format als optionale Dateierweiterung angegeben werden. Das Attribut [FormatFilter] überprüft, ob in den RouteData ein Formatwert vorhanden ist, und ordnet das Antwortformat beim Erstellen der Antwort dem entsprechenden Formatierer zu.

Route Formatierungsprogramm
/api/products/5 Standard-Ausgabeformatierungsprogramm
/api/products/5.json Der JSON-Formatierer (sofern konfiguriert)
/api/products/5.xml XML-Formatierungsprogramm (falls konfiguriert)

ASP.NET Core MVC unterstützt das Formatieren von Antwortdaten in angegebenen Formaten oder als Reaktion auf die Anforderung eines Clients.

Formatspezifische Aktionsergebnisse

Einige Aktionsergebnistypen sind für ein bestimmtes Format spezifisch, wie z.B. JsonResult und ContentResult. Aktionen können Ergebnisse zurückgeben, die immer ein angegebenes Format verwenden, wobei die Anforderung eines Clients für ein anderes Format ignoriert wird. Bei der Rückgabe JsonResult werden z. B. ON-formatierte Daten zurückgegeben JS, und die ContentResult Rückgabe gibt Zeichenfolgendaten im Klartextformat zurück.

Zum Zurückgeben eines bestimmten Typs ist keine Aktion erforderlich. ASP.NET Core unterstützt jeden Objektrückgabewert. Ergebnisse von Aktionen, die Objekte zurückgeben, die keine IActionResult Typen sind, werden mithilfe der entsprechenden IOutputFormatter Implementierung serialisiert. Weitere Informationen finden Sie unter Rückgabetypen der Controlleraktion in ASP.NET Core Web-API.

Standardmäßig gibt die integrierte Hilfsmethode ControllerBase.Ok ON-formatierte Daten zurück JS:

[HttpGet]
public IActionResult Get()
    => Ok(_todoItemStore.GetList());

Der Beispielcode gibt eine Liste von Aufgabenelementen zurück. Wenn Sie die F12-Browserentwicklertools oder Postman mit dem vorherigen Code verwenden, wird Folgendes angezeigt:

  • Der Antwortheader, der content-type:application/json; charset=utf-8enthält.
  • Die Anforderungsheader. Beispiel: Der Header Accept. Der Accept-Header wird vom vorangehenden Code ignoriert.

Wenn Sie Daten im Textformat zurückgeben möchten, verwenden Sie ContentResult und das Content-Hilfsprogramm:

[HttpGet("Version")]
public ContentResult GetVersion()
    => Content("v1.0.0");

Im obigen Code wird text/plain als Content-Type zurückgegeben.

Bei Aktionen mit mehreren Rückgabetypen wird IActionResult zurückgegeben. Beispiel: Zurückgeben unterschiedlicher HTTP-Statuscodes basierend auf dem Ergebnis des Vorgangs.

Inhaltsaushandlung

Eine Inhaltsaushandlung tritt auf, wenn der Client einen Accept-Header angibt. Das Standardformat, das von ASP.NET Core verwendet wird, ist JSON. Für die Inhaltsaushandlung gilt:

  • Sie wird durch ObjectResult implementiert.
  • Sie ist in die Statuscode-spezifischen Aktionsergebnisse integriert, die von den Hilfsmethoden zurückgegeben werden. Die Hilfsmethoden für Aktionsergebnisse basieren auf ObjectResult.

Wenn ein Modelltyp zurückgegeben wird, ist ObjectResultder Rückgabetyp .

Die folgende Aktionsmethode verwendet die Hilfsmethoden Ok und NotFound:

[HttpGet("{id:long}")]
public IActionResult GetById(long id)
{
    var todo = _todoItemStore.GetById(id);

    if (todo is null)
    {
        return NotFound();
    }

    return Ok(todo);
}

Standardmäßig unterstützt ASP.NET Core die folgenden Medientypen:

  • application/json
  • text/json
  • text/plain

Tools wie Fiddler oder Postman können den Accept-Anforderungsheader festlegen, um das Rückgabeformat anzugeben. Wenn der Accept-Header einen vom Server unterstützten Typ enthält, wird dieser Typ zurückgegeben. Der nächste Abschnitt zeigt, wie zusätzliche Formatierer hinzugefügt werden.

Controlleraktionen können POCOs (Plain Old CLR Objects) zurückgeben. Wenn ein POCO zurückgegeben wird, erstellt die Runtime automatisch ein ObjectResult, das das Objekt umschließt. Der Client empfängt das formatierte serialisierte Objekt. Wenn das zurückgegebene Objekt null ist, wird eine 204 No Content-Antwort zurückgegeben.

Im folgenden Beispiel wird ein Objekttyp zurückgegeben:

[HttpGet("{id:long}")]
public TodoItem? GetById(long id)
    => _todoItemStore.GetById(id);

Im vorherigen Code gibt eine Anforderung für ein gültiges Todo-Element eine 200 OK Antwort zurück. Eine Anforderung für ein ungültiges Todo-Element gibt eine 204 No Content Antwort zurück.

Der Accept-Header

Eine Aushandlung des Inhalts findet statt, wenn in der Anforderung ein Accept-Header angezeigt wird. Wenn eine Anforderung einen Accept-Header enthält, führt ASP.NET Core Folgendes aus:

  • Die Medientypen im Accept-Header werden in der bevorzugten Reihenfolge aufgelistet.
  • Es wird versucht, einen Formatierer zu finden, der eine Antwort in einem der angegebenen Formate erzeugen kann.

Wenn kein Formatierer gefunden wird, der die Clientanforderung erfüllen kann, führt ASP.NET Core Folgendes aus:

  • Gibt zurück 406 Not Acceptable , wenn MvcOptions.ReturnHttpNotAcceptable auf trueoder festgelegt ist.
  • Es wird versucht, den ersten Formatierer zu finden, der eine Antwort erzeugen kann.

Wenn kein Formatierer für das angeforderte Format konfiguriert wurde, wird der erste Formatierer verwendet, der das Objekt formatieren kann. Wenn in der Anforderung kein Accept-Header vorhanden ist, gilt Folgendes:

  • Der erste Formatierer, der das Objekt verarbeiten kann, wird zum Serialisieren der Antwort verwendet.
  • Es findet keine Aushandlung statt. Der Server bestimmt, welches Format zurückgegeben werden soll.

Enthält der Accept-Header */*, wird der Header ignoriert, es sei denn, RespectBrowserAcceptHeader ist in MvcOptions auf TRUE festgelegt.

Browser und Inhaltsaushandlung

Im Gegensatz zu typischen API-Clients, stellen Webbrowser Accept-Header bereit. Webbrowser geben viele Formate an, einschließlich Wildcards. Wenn das Framework erkennt, dass eine Anforderung von einem Browser stammt, wird standardmäßig Folgendes ausgeführt:

  • Der Accept-Header wird ignoriert.
  • Der Inhalt wird in JSON zurückgegeben, sofern nicht anders konfiguriert.

Dieser Ansatz bietet eine konsistentere Erfahrung in allen Browsern bei der Nutzung von APIs.

Legen Sie die -Eigenschaft auf fest, um eine App so truezu konfigurieren, dass browser RespectBrowserAcceptHeader accept headers berücksichtigt werden:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers(options =>
{
    options.RespectBrowserAcceptHeader = true;
});

Konfigurieren von Formatierern

Apps, die zusätzliche Formate unterstützen müssen, können die entsprechenden NuGet-Pakete hinzufügen und die Unterstützung konfigurieren. Es gibt unterschiedliche Formatierungsprogramme für Ein- und für Ausgaben. Eingabeformatierer werden von der Modellbindung verwendet. Ausgabeformatierer werden zum Formatieren von Antworten verwendet. Informationen zum Erstellen eines benutzerdefinierten Formatierers finden Sie unter Benutzerdefinierte Formatierer.

Hinzufügen von Unterstützung für das XML-Format

Rufen AddXmlSerializerFormattersSie zum Konfigurieren von XML-Formatierern auf, die mit XmlSerializerimplementiert wurden:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers()
    .AddXmlSerializerFormatters();

Bei Verwendung dieses Codes geben Controllermethoden das geeignete Format basierend auf dem Accept-Header der Anforderung zurück.

Konfigurieren von System.Text.Json-basierten Formatierern

Verwenden Microsoft.AspNetCore.Mvc.JsonOptions.JsonSerializerOptionsSie , um Features für die System.Text.Json-basierten Formatierer zu konfigurieren. Der folgende hervorgehobene Code konfiguriert die PascalCase-Formatierung anstelle der standardmäßigen camelCase-Formatierung:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.PropertyNamingPolicy = null;
    });

Verwenden JsonResultSie , um Ausgabeserialisierungsoptionen für bestimmte Aktionen zu konfigurieren. Beispiel:

[HttpGet]
public IActionResult Get() 
    => new JsonResult(
        _todoItemStore.GetList(),
        new JsonSerializerOptions { PropertyNamingPolicy = null });

Unterstützung für das on-basierte JSFormat hinzufügen Newtonsoft.Json

Die Standardmäßigen JSON-Formatierer verwenden System.Text.Json. Um die Newtonsoft.Json-basierten Formatierer zu verwenden, installieren Sie das Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet-Paket, und konfigurieren Sie es in Program.cs:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers()
    .AddNewtonsoftJson();

Im vorherigen Code konfiguriert der Aufruf von AddNewtonsoftJson die folgenden Web-API-, MVC- und Razor Pages-Features für die Verwendung Newtonsoft.Json:

Einige Features funktionieren mit System.Text.Json-basierten Formatierern möglicherweise nicht gut und erfordern einen Verweis auf die Newtonsoft.Json-basierten Formatierer. Verwenden Sie weiterhin die Newtonsoft.Json-basierten Formatierer, wenn die App:

  • Sie verwendet Newtonsoft.Json-Attribute. Zum Beispiel: [JsonProperty] oder [JsonIgnore].
  • Sie passt die Serialisierungseinstellungen an.
  • Sie nutzt Features, die von Newtonsoft.Json bereitgestellt werden.

Verwenden SerializerSettingsSie zum Konfigurieren von Features für die Newtonsoft.Json-basierten Formatierer :

builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    });

Verwenden JsonResultSie , um Ausgabeserialisierungsoptionen für bestimmte Aktionen zu konfigurieren. Beispiel:

[HttpGet]
public IActionResult GetNewtonsoftJson()
    => new JsonResult(
        _todoItemStore.GetList(),
        new JsonSerializerSettings { ContractResolver = new DefaultContractResolver() });

Format ProblemDetails und ValidationProblemDetails Antworten

Die folgende Aktionsmethode ruft auf ControllerBase.Problem , um eine ProblemDetails Antwort zu erstellen:

[HttpGet("Error")]
public IActionResult GetError()
    => Problem("Something went wrong.");

Eine ProblemDetails Antwort lautet immer camelCase, auch wenn die App das Format auf PascalCase festlegt. ProblemDetails folgt RFC 7807, der Kleinbuchstaben angibt.

Wenn das [ApiController] Attribut auf eine Controllerklasse angewendet wird, erstellt der Controller eine ValidationProblemDetails Antwort, wenn die Modellvalidierung fehlschlägt. Diese Antwort enthält ein Wörterbuch, das die Eigenschaftennamen des Modells unverändert als Fehlerschlüssel verwendet. Das folgende Modell enthält beispielsweise eine einzelne Eigenschaft, die eine Validierung erfordert:

public class SampleModel
{
    [Range(1, 10)]
    public int Value { get; set; }
}

Standardmäßig verwendet die ValidationProblemDetails zurückgegebene Antwort, wenn die Value Eigenschaft ungültig ist, einen Fehlerschlüssel von Value, wie im folgenden Beispiel gezeigt:

{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "traceId": "00-00000000000000000000000000000000-000000000000000-00",
  "errors": {
    "Value": [
      "The field Value must be between 1 and 10."
    ]
  }
}

Um die Als Fehlerschlüssel verwendeten Eigenschaftsnamen zu formatieren, fügen Sie der MvcOptions.ModelMetadataDetailsProviders Auflistung eine Implementierung von IMetadataDetailsProvider hinzu. Im folgenden Beispiel wird eine System.Text.Json-basierte Implementierung hinzugefügt, SystemTextJsonValidationMetadataProviderdie Eigenschaftennamen standardmäßig als camelCase formatiert:

builder.Services.AddControllers();

builder.Services.Configure<MvcOptions>(options =>
{
    options.ModelMetadataDetailsProviders.Add(
        new SystemTextJsonValidationMetadataProvider());
});

SystemTextJsonValidationMetadataProvider akzeptiert auch eine Implementierung von in seinem Konstruktor, der eine benutzerdefinierte Benennungsrichtlinie zum Formatieren von JsonNamingPolicy Eigenschaftsnamen angibt.

Um einen benutzerdefinierten Namen für eine Eigenschaft innerhalb eines Modells festzulegen, verwenden Sie das Attribut [JsonPropertyName] für die Eigenschaft:

public class SampleModel
{
    [Range(1, 10)]
    [JsonPropertyName("sampleValue")]
    public int Value { get; set; }
}

Die ValidationProblemDetails Antwort, die für das vorherige Modell zurückgegeben wird, wenn die Value Eigenschaft ungültig ist, verwendet einen Fehlerschlüssel von sampleValue, wie im folgenden Beispiel gezeigt:

{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "traceId": "00-00000000000000000000000000000000-000000000000000-00",
  "errors": {
    "sampleValue": [
      "The field Value must be between 1 and 10."
    ]
  }
}

Um die ValidationProblemDetails Antwort mit Newtonsoft.Jsonzu formatieren, verwenden Sie NewtonsoftJsonValidationMetadataProvider:

builder.Services.AddControllers()
    .AddNewtonsoftJson();

builder.Services.Configure<MvcOptions>(options =>
{
    options.ModelMetadataDetailsProviders.Add(
        new NewtonsoftJsonValidationMetadataProvider());
});

Standardmäßig NewtonsoftJsonValidationMetadataProvider werden Eigenschaftennamen als camelCase formatiert. NewtonsoftJsonValidationMetadataProvider akzeptiert auch eine Implementierung von in seinem Konstruktor, der eine benutzerdefinierte Benennungsrichtlinie zum Formatieren von NamingPolicy Eigenschaftsnamen angibt. Verwenden Sie das [JsonProperty] -Attribut, um einen benutzerdefinierten Namen für eine Eigenschaft innerhalb eines Modells festzulegen.

Angeben eines Formats

Um Verweisformate einzuschränken, wenden Sie den [Produces]-Filter an. Wie die meisten Filter[Produces] kann im Aktions-, Controller- oder globalen Bereich angewendet werden:

[ApiController]
[Route("api/[controller]")]
[Produces("application/json")]
public class TodoItemsController : ControllerBase

Mit dem oben stehenden [Produces]-Filter wird Folgendes ausgeführt:

  • Erzwingt, dass alle Aktionen innerhalb des Controllers ON-formatierte Antworten für POCOs (Plain Old CLR Objects) oder ObjectResult und die zugehörigen abgeleiteten Typen zurückgebenJS.
  • Gibt JSON-formatierte Antworten zurück, auch wenn andere Formatierer konfiguriert sind und der Client ein anderes Format angibt.

Weitere Informationen finden Sie unter Filter.

Formatierer für besondere Fälle

Einige besondere Fälle werden mithilfe von integrierten Formatierungsprogrammen implementiert. Standardmäßig werden string-Rückgabetypen als text/plain formatiert (bzw. als text/html, wenn sie über den Accept-Header angefordert werden). Dieses Verhalten kann durch Entfernen von StringOutputFormatter gelöscht werden. Formatierer werden in Program.csentfernt. Aktionen mit einem Modellobjekt-Rückgabetyp geben null zurück, wenn der Rückgabewert 204 No Content lautet. Dieses Verhalten kann durch Entfernen von HttpNoContentOutputFormatter gelöscht werden. Der folgende Code entfernt StringOutputFormatter und HttpNoContentOutputFormatter.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers(options =>
{
    // using Microsoft.AspNetCore.Mvc.Formatters;
    options.OutputFormatters.RemoveType<StringOutputFormatter>();
    options.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
});

Ohne geben StringOutputFormatterdie integrierten JSON-Formatierungsformate string Typen zurück. Wenn der integrierte ON-Formatierer JSentfernt wird und ein XML-Formatierer verfügbar ist, gibt der XML-Formatierer string Typen zurück. Andernfalls geben string-Rückgabetypen 406 Not Acceptable zurück.

Ohne HttpNoContentOutputFormatter werden NULL-Objekte mithilfe des konfigurierten Formatierungsprogramms formatiert. Beispiel:

  • Der JSON-Formatierer gibt eine Antwort mit dem Textkörper zurück null.
  • Der XML-Formatierer gibt ein leeres XML-Element mit festgelegtem Attribut xsi:nil="true" zurück.

Zuordnung des Antwortformats durch URLs

Clients können in der URL ein bestimmtes Format anfordern, beispielsweise folgendermaßen:

  • In der Abfragezeichenfolge oder als Teil des Pfads.
  • Durch Verwendung einer formatspezifischen Dateierweiterung wie „.xml“ oder „.json“.

Die Zuordnung des Anforderungspfads sollte in der Route angegeben werden, die die API verwendet. Beispiel:

[ApiController]
[Route("api/[controller]")]
[FormatFilter]
public class TodoItemsController : ControllerBase
{
    private readonly TodoItemStore _todoItemStore;

    public TodoItemsController(TodoItemStore todoItemStore)
        => _todoItemStore = todoItemStore;

    [HttpGet("{id:long}.{format?}")]
    public TodoItem? GetById(long id)
        => _todoItemStore.GetById(id);

Die vorangehende Route ermöglicht die Angabe des angeforderten Formats mithilfe einer optionalen Dateierweiterung. Das Attribut [FormatFilter] überprüft, ob in den RouteData ein Formatwert vorhanden ist, und ordnet das Antwortformat beim Erstellen der Antwort dem entsprechenden Formatierer zu.

Route Formatierungsprogramm
/api/todoitems/5 Standard-Ausgabeformatierungsprogramm
/api/todoitems/5.json Der JSON-Formatierer (sofern konfiguriert)
/api/todoitems/5.xml XML-Formatierungsprogramm (falls konfiguriert)

Polymorphe Deserialisierung

Integrierte Funktionen bieten einen begrenzten Funktionsbereich der polymorphen Serialisierung, aber gar keine Unterstützung für Deserialisierung. Die Deserialisierung erfordert einen benutzerdefinierten Konverter. Eine vollständige Stichprobe der polymorphen Deserialisierung finden Sie unter Polymorphe Deserialisierung .

Zusätzliche Ressourcen