2017-11-02 7 views
1

複雑なオブジェクトの定義をリストするために、C#でSwagger-UIの注釈を使用する適切な方法は何でしょうか。C#ServiceStack属性とSwagger UI - 複雑なオブジェクトのリスト

たとえば、私たちはこのようなものがある場合:だから

[ApiMember(Name = "Foo", Description = "Some description", 
DataType = "List<Foo>", IsRequired = true)]  
public List<Foo> Foo {get; set;} 

を私はそのようにそれを使用する場合、闊歩-UIはちょうどドキュメントに表示され、これはFooListではなく、リンクか何かであること。

つまり、モデル\スキーマでは正しく表示されていますが、フィールド定義には表示されていません。つまり、どのように動作するのか、またはリスト内で期待される正確なデータ構造を指すように変更できます。アレイ? enter image description here

答えて

1

[Route("/warranties", "POST", Summary = "POST New Warrantty", Notes = "Create new warranty into our system")] 
public class CreateWarrantyRequest : IReturn<ApiResponse> 
{ 
    [ApiMember(Name = "CoverageId", Description = "Coverage Id", DataType = "int", IsRequired = true)] 
    public string CoverageId { get; set; } 

    [ApiMember(Name = "WarrantyProducts", Description = "Warranty Products", DataType = "List<WarrantyProduct>", IsRequired = true)] 
    public List<WarrantyProduct> WarrantyProducts { get; set; } 
} 

public class WarrantyProduct 
{ 
    [ApiMember(Name = "Manufacturer", Description = "Manufacturer Name", DataType = "string", IsRequired = true)] 
    public string Manufacturer { get; set; } 
    [ApiMember(Name = "ProductType ", Description = "Product Type", DataType = "ProductType", IsRequired = true)] 
    public ProductType ProductType { get; set; } 
    [ApiMember(Name = "SerialNumber", Description = "Serial Number", DataType = "string", IsRequired = true)] 
    public string SerialNumber { get; set; } 
    [ApiMember(Name = "PurchasePrice", Description = "Purchase Price", DataType = "decimal", IsRequired = true)] 
    public decimal PurchasePrice { get; set; }  
} 

そして、これはそれがSwaggerFeatureでどのように見えるかです:: enter image description here

そして、これはそれがOpenApiFeatureでどのように見えるかです

EDIT はここでフルDTOサンプルですDataTypeはa known typeを指定するためのものです。 List<T>のような複雑な型の定義は、そのitemsreferencing the Complex Type schema、例えばとarrayタイプを指定することによって行われます。

{ 
    "description": "A complex object array response", 
    "schema": { 
    "type": "array", 
    "items": { 
     "$ref": "#/definitions/VeryComplexType" 
    } 
    } 
} 

これはServiceStackは、データ型を指定せずに自動的に何をするかで、複合型を定義することはできません[ApiMember]を使用します。

+0

SwaggerFeatureを使用するとき、私は要求のためのモデルスキーマを持っていますが、OpenApiFeatureを使用しているときは表示されません。また、OpenApiFeatureを使用しているときはデータ型に "未定義"が表示されます。あなたはこれについていくつかのC#の例を表示できますか、多分何か間違っていますか? – ShP

+0

@ShP Swagger UIの2つの異なるバージョンを使用して消費される2つの異なる仕様です。私が言ったように、属性を使って複雑な型を定義する方法はありませんが、ServiceStackはOpen API仕様に従って適切な複合型定義を既に出しています。 – mythz

+0

私はちょっと混乱していますが、あなたはSSがすでに適切な複合型を発行していると言っていますが、オブジェクトのOpenApiでは "未定義"と書かれています。 – ShP

関連する問題