使用PascalCase属性名称在.NET中创建API模型,但序列化为CamelCase

时间:2019-02-25 15:15:25

标签: c# .net .net-core json.net

我通常使用各种文本处理工具从REST API文档中提取属性列表,然后使用Newtonsoft.Json在字段上方添加注释,以告知程序该属性可以称为“当我们序列化为JSON时,请使用

将其称为“ deliveryAddress”
[JsonProperty(PropertyName = "deliveryAddress")]
public string DeliveryAddress{ get; set; }

这似乎有些漫长,所以我想知道是否有一种更简单的方法,或者是VS中的某些功能,我可以用来制作某种“宏”来将此注释应用于PascalCase属性列表。

3 个答案:

答案 0 :(得分:2)

那很简单,原来我一直在不必要地弄乱我的代码。 希望这对我所处位置的其他人来说是一个有用的问题。

还有另一个 class 级别的注释可以在这里使用。

[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
public class Order
{
    public string DeliveryAddress {get;set;}
    public string FirstName {get;set;}
    [JsonProperty(NamingStrategyType = typeof(SnakeCaseNamingStrategy))]
    public string NewlyAddedProperty {get;set;}
}

这将在序列化后将CamelCasing应用于所有属性,并且可以在内嵌注释级别上覆盖此 ,如上所示。

多么可爱的图书馆。

答案 1 :(得分:0)

您可以使用大小写转换器手动构建串行器:

var jsonSerializersettings = new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};

var myJsonOutput = JsonConvert.DeserializeObject<object>myJsonInput.ToString(),jsonSerializersettings);

答案 2 :(得分:0)

在ASP.net内核中,默认情况下,属性名称序列化为camelCase。

如果由于某些原因不是这种情况,或者您需要进一步自定义,则可以通过在JSON序列化程序设置中设置NamingStrategy来手动指定命名策略:

services.AddMvc().AddJsonOptions(options =>
{
  var resolver = options.SerializerSettings.ContractResolver as DefaultContractResolver;
  resolver.NamingStrategy = new CamelCaseNamingStrategy();
});

然后,每次从API返回对象时,该对象都会使用骆驼箱名称进行序列化。

如果您要手动将JSON序列化为字符串,则可以注入IOptions<MvcJsonOptions>来访问MVC使用的默认序列化程序设置:

var jsonString = JsonConvert.SerializeObject(obj, options.Value.SerializerSettings);