2017-08-07 2 views
1

Wir verwenden swagger/nswag zur Dokumentation eines Webapi-Projekts.Swagger/NSwag: Parametertyp neu definieren

Als BodyParameters für die ActionMethods verwenden wir Klassen mit dem Suffix Command, die Parameter für z. Erstellen eines Domänenobjekts in einer Datenbank.

A Befehl-Klasse könnte wie folgt aussehen:

public class CreateChildCommand { 
    public Parent Parent { get; set; } 
    public int Position { get; set; } 
} 

Während Position ein einfaches int ist, Eltern sind eine Domain-Klasse in einer Datenbank beibehalten. Kann es so aussieht irgendwie:

public class Parent { 

    public Guid Id { get; set; } 
    public string Name { get; set; } 
    ... 
} 

Es kann durch seine Id aus der Datenbank geladen werden, so dass wir die ID als Parameter nur für den Befehl Parameter wie dies im Json passieren:

{ 
    "Position": 3, 
    "Parent": "41E71207-7F1E-4895-8BCC-14E1293A7907" 
} 

Beim Deserialisieren des Jsons wird der Elternteil über ein Dao mit seiner Id geladen. Das Problem ist jetzt, dass Swagger/nswag nicht verstehen, dass „Magie“ und zeigt die Parameter für die Methode wie folgt:

{ 
    "Position": number, 
    "Parent": { 
     Id: "Guid", 
     "Name": "string", 
     ... 
    } 
} 

Gibt es eine Möglichkeit Prahlerei zu sagen, den Typen zu ersetzen, für Eltern zu machen sieht es so:

{ 
    "Position": "int", 
    "Parent": "Guid" 
} 

Antwort

2

Sie das JsonSchemaAttribute Attribut verwenden kann, um das Schema Typen einer komplexen Eigenschaft außer Kraft zu setzen:

public class CreateChildCommand { 
    [JsonSchema(JsonObjectType.String, Format = "guid")] 
    public Parent Parent { get; set; } 

    public int Position { get; set; } 
} 

Das Attribut implementiert ist in der NJsonSchema Bibliothek: https://www.nuget.org/packages/NJsonSchema/

Eine andere Möglichkeit ist, einen Typ-Mapper zu verwenden, um alle übergeordneten Klassen in eine Zeichenfolge auf der Karte, https://github.com/RSuter/NJsonSchema/wiki/Type-Mappers

+0

sehen Ich habe es über TypeMappers: – Tobias

Verwandte Themen