我是 API 编程新手。目前我正在使用 SwaggerUI for .NET
我想以 JSON 格式回复请求:
{
"id": "value"
}
如何为我的值创建并返回这样的格式?例如项目中默认代码返回
[
"value"
]
使用此功能
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
如何返回一个可以被 swagger 正确解释的 JSON 对象?
您拥有根据需要返回对象的正确设置。问题是你没有返回正确的对象。
预期的 json
{"id":"value"}
是 object 的 json 表示。您返回的 json 是 list 的 json 表示。
您返回的 json 是一个列表,因为这就是您的方法返回的内容。正如 @NateBarbettini 回答的那样,您需要更改方法返回的内容。
您的方法返回的值是
string[]
,它是一个字符串数组,它将被格式化为 JSON 列表。您需要返回一个对象。您可以使用 @NateBarbettini 建议的匿名对象,也可以返回您编写的自定义类。
为了产生结果,类:
public class FooViewModel
{
public string Id {get; set;}
}
就可以了。
您现在遇到的问题是外壳脱落。 FooViewModel.Id 使用 PascalCase,这是 C# 中的标准命名法,但 json 使用驼峰命名法。
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver();
,其中 config
是您的 HttpConfiguration。您可能会在代码中看到此内容为 GlobalConfiguration.Configuration
示例
[JsonProperty("id")]
public string Id {get; set;}
无论你做什么,你都必须从
IEnumerable<string>
更改方法的返回类型。我喜欢细节,所以我会将你的返回类型设置为你为类命名的任何名称,但将其保留为 object
就可以了。
您可以返回一个具有您想要的确切形状的匿名对象:
public object Get()
{
return new { id = "value" };
}
我用它来将 mvc 控制器返回值转换为 json:
return Json(yourObject, JsonRequestBehavior.AllowGet);