【问题标题】:convert C# object to IOpenApiAny [closed]将 C# 对象转换为 IOpenApiAny [关闭]
【发布时间】:2019-12-06 01:14:59
【问题描述】:

我想设置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(测试版),所以我正在尝试使用它来创建我的过滤器。

【问题讨论】:

  • “我希望设置 OpenApiSchema.Example”是什么意思?请问你能举一个完整的例子吗?目前我很难理解你的问题。
  • IOpenApiAny 是一个接口。您不将对象转换为接口,对象的类需要实现接口。 OpenAPI 是 Swagger 的“新”(已经 2 岁了)名称,所以 Swashbuckle 已经支持它,即使名称不同
  • 请发布您的代码。您是否有一些用于实现旧接口的代码,现在需要实现 IOpenApiAny ?

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


【解决方案1】:

你的类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
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多