c#POST JSON as camel case for all requests

时间:2015-07-20 12:13:39

标签: c# json

我已经将.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会应用于所有响应和请求。

有谁知道如何开启全球驼峰式开关?

2 个答案:

答案 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);