我已经将.Net对象作为camel cased JSON返回,我这样做了:
// Web API configuration and services
var formatters = config.Formatters;
var jsonFormatter = formatters.JsonFormatter;
var serializerSettings = jsonFormatter.SerializerSettings;
// Remove XML formatting
formatters.Remove(config.Formatters.XmlFormatter);
jsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
// Configure our JSON output
serializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
serializerSettings.Formatting = Formatting.Indented;
这一切都运行正常,但今天我发布到外部API并收到错误,事实证明问题是使用Pascal案例而不是Camel案例的json格式。我发布的数据看起来像这样:
{"CartId":"8fb3792f-81af-45e6-92f6-f08366624f1e","Id":"944990015513953203","Quantity":5}
我四处寻找并找到了将数据转换成驼峰的解决方案,如下所示:
var serializer = new JsonSerializer()
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
var json = JObject.FromObject(model, serializer);
但是你可以猜到,这并不合适,因为我不想在每个控制器的每个POST动作中都这样做。我原以为上面的WebApiConfig会应用于所有响应和请求。
有谁知道如何开启全球驼峰式开关?
答案 0 :(得分:3)
在这种情况下,您不希望为所有请求更改它,因此只需使用要发送给它们的模型上的属性。
using Newtonsoft.Json;
[JsonProperty("Name")]
public string Name { get; set; }
这将确保您以您想要的格式将它发送给他们。
答案 1 :(得分:0)
您可以设置全局默认序列化设置:
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
现在每次将模型序列化为json默认设置时都会使用:
var json = JsonConvert.SerializeObject(model);