sup*_*cal 21 c# ruby api json.net
我正在使用http://json.codeplex.com/,我正在谈论基于Ruby的Rest API.问题是大多数属性都有一个ruby下划线命名约定.我想知道是否有人知道一种方式,以便我可以避免添加大量的JsonProperty.
例如,我想避免添加JsonProperty属性并在序列化程序设置中内置一个约定,以便它知道在.NET命名约定中尝试使用下划线映射属性:)
public class Member
{
[JsonProperty(PropertyName = "avatar_url")]
public string AvatarUrl { get; set; }
[JsonProperty(PropertyName = "twitter_screen_name")]
public string TwitterScreenName { get; set; }
[JsonProperty(PropertyName = "website_url")]
public string WebSiteUrl { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*ing 34
更新 - 2016年9月:
Json.NET 9.0.1有SnakeCaseNamingStrategy.您可以使用它自动拥有twitter_screen_name样式属性.
根据需要继承DefaultContractResolver
和覆盖ResolvePropertyName
格式化属性名称.
CamelCasePropertyNamesContractResolver
对属性名称进行类似的全局更改.
小智 30
阅读本文:http://nyqui.st/json-net-newtonsoft-json-lowercase-keys
public class UnderscoreMappingResolver : DefaultContractResolver
{
protected override string ResolvePropertyName(string propertyName)
{
return System.Text.RegularExpressions.Regex.Replace(
propertyName, @"([A-Z])([A-Z][a-z])|([a-z0-9])([A-Z])", "$1$3_$2$4").ToLower();
}
}
Run Code Online (Sandbox Code Playgroud)
vai*_*dil 11
从版本9开始,存在一个新的命名策略属性,它具有内置的SnakeCaseNamingStrategy类.使用下面的代码并注册contractResolver
为SerializerSettings.ContractResolver
.
var contractResolver = new DefaultContractResolver();
contractResolver.NamingStrategy = new SnakeCaseNamingStrategy();
Run Code Online (Sandbox Code Playgroud)
默认情况下,该类不包括字典,并且它不会覆盖任何手动设置的属性值.这些是可以在重载中传递的两个参数:
// true parameter forces handling of dictionaries
// false prevents the serializer from changing anything manually set by an attribute
contractResolver.NamingStrategy = new SnakeCaseNamingStrategy(true, false);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8937 次 |
最近记录: |