【问题标题】:Convert Swagger to C# object [duplicate]将 Swagger 转换为 C# 对象 [重复]
【发布时间】:2017-07-12 04:36:44
【问题描述】:

有没有简单的方法将 Json 字符串转换为 C# 对象?

我有一个 json 格式的 swagger 文件,需要将其转换为 C# 对象

{
  "swagger": "2.0",
  "info": {
    "version": "Profiles",
    "title": "Profiles"
  },
  "paths": {
    "/api/Profiles/Get": {
      "get": {
        "tags": [ "Profiles"],
        "operationId": "Profiles_GetById",
        "consumes": [],
        "produces": [],
        "parameters": [{ "name": "id"}]
      }
    },
    "/api/Profiles": {
      "get": {
        "tags": [
          "Profiles"
        ],
        "operationId": "Profiles_GetBySubscriptionid",
        "consumes": [],
        "produces": [],
        "parameters": [{ "name": "subscriptionId"}]
      }
    }
  },
  "definitions": {}
}

所以我现在面临的问题是我不知道如何将路径转换为我的 C# 对象的属性。具体来说,我不知道如何为“/api/Profiles/Get”或“/api/Profiles”定义 C# 对象属性。

public class SwaggerObject
{
  [JsonProperty("paths")]
  public SwaggerPath Paths { get; set;}
}
public class SwaggerPath {
  ... 
}

【问题讨论】:

  • 如果你有一个有效的 Json 字符串,我使用了一个 Json 转换器来创建一个 c# 对象。示例:Newtonsoft.Json.JsonConvert.DeserializeObject(Json);
  • Visual Studio 中有一个内置工具可以根据 json 文件生成类。只需复制 json 并在“查看”中的某处找到“将 json 粘贴为类”。如果您想手动执行此操作,您可以尝试将 JsonProperty 与 'api....' 一起使用,但不确定它是否会起作用。另一种方法是将其反序列化为 Dictionary
  • @Mickers 在我的 Parser 类中,我已经使用了 JsonConvert.DeserializeObject(json)。问题是 Json 格式是名称-值对;因此我不知道应该如何定义 SwaggerPath 中的属性,以便它可以包含“/api/Profiles/Get”或“/api/Profiles”。
  • @MistyK ,内部视觉工作室工具在编辑中而不是在视图中。这实际上非常有用和可爱。我每次都必须访问网站。

标签: c# json


【解决方案1】:

如果你有一个有效的 swagger 定义,你可以使用AutoRest 为你生成一个客户端。自动生成的客户端包含您在 swagger 文档中定义的所有类型的模型。

您可以在检索到响应后致电Newtonsoft.Json.JsonConvert.DeserializeObject<MyModel>(json​)。更好的是,您可以使用自动生成的客户端在 .NET 代码中进行 HTTP 调用。

【讨论】:

    猜你喜欢
    • 2018-04-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2015-01-02
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多