我通常使用各种文本处理工具从REST API文档中提取属性列表,然后使用Newtonsoft.Json在字段上方添加注释,以告知程序该属性可以称为“当我们序列化为JSON时,请使用
将其称为“ deliveryAddress”[JsonProperty(PropertyName = "deliveryAddress")]
public string DeliveryAddress{ get; set; }
这似乎有些漫长,所以我想知道是否有一种更简单的方法,或者是VS中的某些功能,我可以用来制作某种“宏”来将此注释应用于PascalCase属性列表。
答案 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);