如何使用Json.NET将对象的特定属性转换为驼峰命名?
如何用Json.NET仅将特定属性序列化为驼峰命名
刚好碰到过类似的需求,给你两种实用的解决方案,看你场景选:
方法1:直接用JsonProperty特性(最简单,适合单个属性)
如果只是个别属性需要改命名,直接在目标属性上标记JsonProperty特性,指定你想要的名称就行,完全不用改全局序列化设置:
class A { public object B { get; set; } // 直接指定序列化后的名称为"c" [JsonProperty("c")] public object C { get; set; } }
序列化的时候用默认方式就行:
var a = new A { B = 1, C = 2 }; var json = JsonConvert.SerializeObject(a); // 输出结果:{"B":1,"c":2}
这种方法最直接,代码侵入性低,适合只改一两个属性的场景。
方法2:自定义ContractResolver(适合多个属性或动态场景)
如果你有一堆属性需要转驼峰,或者不想硬编码名称到实体类里,可以自定义一个解析器,只对指定属性应用驼峰规则:
public class SpecificCamelCaseResolver : DefaultContractResolver { // 在这里列出需要转驼峰的属性名 private readonly HashSet<string> _targetProperties = new HashSet<string> { "C" }; protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { var property = base.CreateProperty(member, memberSerialization); // 如果是目标属性,就把首字母转小写 if (_targetProperties.Contains(member.Name)) { property.PropertyName = char.ToLowerInvariant(property.PropertyName[0]) + property.PropertyName.Substring(1); } return property; } }
使用的时候指定这个解析器:
var settings = new JsonSerializerSettings { ContractResolver = new SpecificCamelCaseResolver() }; var a = new A { B = 1, C = 2 }; var json = JsonConvert.SerializeObject(a, settings); // 输出结果:{"B":1,"c":2}
后续如果要加更多属性,只要在_targetProperties里添加属性名就行,不用动实体类,扩展性更好。
内容的提问来源于stack exchange,提问作者pushkin
相关产品推荐
相关产品推荐

