【发布时间】:2014-06-23 16:07:02
【问题描述】:
我想使用 Web API 返回骆驼大小写的 JSON 数据。我继承了一个乱七八糟的项目,它使用了前任程序员目前喜欢使用的任何外壳(说真的!所有大写字母、小写字母、pascal-casing 和 camel-casing - 随你选!),所以我不能使用这个技巧把它放在 WebApiConfig.cs 文件中,因为它会破坏现有的 API 调用:
// Enforce camel-casing for the JSON objects being returned from API calls.
config.Formatters.OfType<JsonMediaTypeFormatter>().First().SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
所以我使用了一个使用 JSON.Net 序列化程序的自定义类。代码如下:
using System.Web.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
public class JsonNetApiController : ApiController
{
public string SerializeToJson(object objectToSerialize)
{
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
if (objectToSerialize != null)
{
return JsonConvert.SerializeObject(objectToSerialize, Formatting.None, settings);
}
return string.Empty;
}
}
问题是返回的原始数据是这样的:
"[{\"average\":54,\"group\":\"P\",\"id\":1,\"name\":\"Accounting\"}]"
如您所见,反斜杠把事情搞砸了。这是我使用自定义类调用的方式:
public class Test
{
public double Average { get; set; }
public string Group { get; set; }
public int Id { get; set; }
public string Name { get; set; }
}
public class SomeController : JsonNetApiController
{
public HttpResponseMessage Get()
var responseMessage = new List<Test>
{
new Test
{
Id = 1,
Name = "Accounting",
Average = 54,
Group = "P",
}
};
return Request.CreateResponse(HttpStatusCode.OK, SerializeToJson(responseMessage), JsonMediaTypeFormatter.DefaultMediaType);
}
我可以做些什么来摆脱反斜杠?是否有其他方法可以强制执行骆驼套管?
【问题讨论】:
-
您是否希望在不影响全局 json 格式化程序设置的情况下为每个控制器设置骆驼外壳?如果是,那么有一种方法可以在 Web API 中做到这一点
-
@Halcyon:您可以将问题的“答案”部分作为答案发布吗?
-
@StriplingWarrior 完成。
标签: c# html json asp.net-mvc asp.net-web-api