Swagger创建JSON结果.NET

时间:2016-12-15 16:19:58

标签: .net json api swagger

我是编程API的新手。目前我正在使用SwaggerUI for .NET

我想以JSON格式回复请求:

{
  "id": "value"
}

如何为我的值创建并返回这样的格式?例如,项目中的默认代码返回

[
    "value"
]

使用此功能

public IEnumerable<string> Get()
{
    return new string[] { "value1", "value2" };
}

如何返回一个由swagger正确解释的JSON对象?

3 个答案:

答案 0 :(得分:3)

您可以根据需要返回对象。问题是你没有返回正确的对象。

预期的json {"id":"value"}对象的json表示。您要返回的json是列表的json表示。

您要返回的json是一个列表,因为这是您的方法返回的内容。当@NateBarbettini回答时,您需要更改您的方法返回的内容。

您的方法返回的值是string[],它是一个字符串数组,将格式化为JSON列表。您需要返回一个对象。您可以使用@NateBarbettini建议的匿名对象,也可以返回您编写的自定义类。

要生成结果,请使用以下类:

public class FooViewModel 
{
    public string Id {get; set;}
}

会做到这一点。

您现在遇到的问题是外壳已关闭。 FooViewModel.Id使用PascalCase,这是C#的标准,但json使用camelCase。

  1. 您可以破解C#约定并使用camelCase属性名称
  2. 您可以在Startup.cs或Global.asax.cs中调整JsonSerialization设置以使用camelCase:config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();其中config是您的HttpConfiguration。您可以在代码中看到GlobalConfiguration.Configuration
    1. CamelCasePropertyNamesContractResolver
    2. Configuring WebApi
  3. 您可以使用JsonPropertyAttribute明确设置属性的json名称。
  4. 实施例

    [JsonProperty("id")]
    public string Id {get; set;}
    

    无论您做什么,都必须从IEnumerable<string>更改方法的返回类型。我喜欢细节,因此我会将您的返回类型设置为您为类命名的任何内容,但将其保留在object可以正常工作。

答案 1 :(得分:2)

您可以返回一个具有您想要的确切形状的匿名对象:

public object Get()
{
    return new { id = "value" };
}

答案 2 :(得分:0)

我使用它将mvc控制器返回值转换为json:

return Json(yourObject, JsonRequestBehavior.AllowGet);