Я хотел бы вернуть данные JSON на камне с использованием веб-API. Я унаследовал беспорядок проекта, который использует любой корпус, который предыдущий программист чувствовал, как использовать на данный момент (серьезно! Все шапки, строчные буквы, паскаль и корпус верблюда), поэтому я не могу использовать трюк поместить это в файл 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);
}
Что я могу сделать по-другому, чтобы избавиться от обратной косой черты? Есть ли альтернативный способ обеспечения верблюжьей оболочки?