2016-12-15 111 views
0

我是编程API的新手。目前,我与SwaggerUI工作.NETSwagger创建JSON结果.NET

我要回答的JSON格式的请求:

{ 
    "id": "value" 
} 

如何创建并返回这样的格式,我的价值观?例如,在项目的默认密码使用此功能

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

我怎样才能返回,这将正确地招摇解释的JSON对象返回

[ 
    "value" 
] 

回答

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#约定,并使用驼峰属性名称
  2. 可以调整Startup.cs或Global.asax.cs中你JsonSerialization设置使用驼峰:config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();其中config是你HttpConfiguration。你可能在你的代码中看到这是GlobalConfiguration.Configuration
    1. CamelCasePropertyNamesContractResolver
    2. Configuring WebApi
  3. 可以使用JsonPropertyAttribute明确设置你的财产的JSON名称应该是什么。

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

不管你做什么,你就必须从IEnumerable<string>改变你的方法的返回类型。我喜欢具体的东西,所以我会将你的返回类型设置为你的课程的名称,但将它留在object就可以工作。

2

你可以返回有你想要的确切形状的匿名对象:

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

我用这一个MVC控制器返回值转换成JSON:

return Json(yourObject, JsonRequestBehavior.AllowGet);