首页 > 解决方案 > 将 C# 对象转换为 IOpenApiAny

问题描述

我想设置OpenApiSchema.Example. 这是一个IOpenApiAny.

我可以将一个简单的 c# 对象转换/转换为现有的IOpenApiAny,例如。Microsoft.OpenApi.Any.OpenApiObject? 或者我需要在我的所有对象上实现接口

例子

var schma = new Microsoft.OpenApi.Models.OpenApiSchema
{
    Example = new MyObject();//doesn't work, how can i cast it?
};

背景:我正在尝试创建一个 Swashbuckle 过滤器,它将示例添加到请求和响应参数和模式中。我正在使用即将推出的使用 OpenAPI.NET 的 Swashbuckle 5.0(测试版),所以我正在尝试使用它来创建我的过滤器。

标签: c#openapi.net-core-3.0

解决方案


你的类MyObject需要实现IOpenApiAny,如下:

public class MyObject : IOpenApiAny
{
    // implement everything here that IOpenApiAny defines:

    public AnyType AnyType { get; }

    public void Write(IOpenApiWriter writer, OpenApiSpecVersion specVersion)
    {
        // implementation
    }
}

如果您有很多这样的类,并且您可以为所有这些类提供一个通用实现,那么您可以使用单个抽象基类并让所有具体类都继承自该类:

public abstract class BaseObject : IOpenApiAny
{
    // implement everything defined by IOpenApiAny (see above)
}

public class MyClass1 : BaseObject
{
    // additional "MyClass1" methods/props
}

public class MyClass2 : BaseObject
{
    // additional "MyClass2" methods/props
}

推荐阅读