我们有一个 Json.NET 设置,它将契约(Contract)解析器设置为 CamelCasePropertyNamesContractResolver。但是,对于某些类型,我想选择退出 camelCasing 行为。是否可以通过以某种方式注释这些类型来做到这一点?
最佳答案
是的,截至 Json.Net version 9.0.1 (2016 年 6 月),[JsonObject]
和 [JsonProperty]
属性都支持 NamingStrategyType
参数。因此,您可以使用 CamelCasePropertyNamesContractResolver
设置默认命名方案,然后选择退出甚至更改为使用这些属性的特定类或属性的不同策略。
这是一个简短的演示:
public class Program
{
public static void Main(string[] args)
{
Foo foo = new Foo
{
CamelCasedProperty = "abc def",
AlsoCamelCasedButChildPropsAreNot = new Bar
{
SomeProperty = "fizz buzz",
AnotherProperty = "whiz bang"
},
ThisOneOptsOutOfCamelCasing = "blah blah",
ThisOneIsSnakeCased = "senssssational"
};
var settings = new JsonSerializerSettings
{
// set up default naming scheme
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Formatting = Formatting.Indented
};
string json = JsonConvert.SerializeObject(foo, settings);
Console.WriteLine(json);
}
}
class Foo
{
public string CamelCasedProperty { get; set; }
public Bar AlsoCamelCasedButChildPropsAreNot { get; set; }
[JsonProperty(NamingStrategyType = typeof(DefaultNamingStrategy))]
public string ThisOneOptsOutOfCamelCasing { get; set; }
[JsonProperty(NamingStrategyType = typeof(SnakeCaseNamingStrategy))]
public string ThisOneIsSnakeCased { get; set; }
}
[JsonObject(NamingStrategyType = typeof(DefaultNamingStrategy))]
class Bar
{
public string SomeProperty { get; set; }
public string AnotherProperty { get; set; }
}
输出:
{
"camelCasedProperty": "abc def",
"alsoCamelCasedButChildPropsAreNot": {
"SomeProperty": "fizz buzz",
"AnotherProperty": "whiz bang"
},
"ThisOneOptsOutOfCamelCasing": "blah blah",
"this_one_is_snake_cased": "senssssational"
}
fiddle :
关于c# - 我如何选择退出 JSON 契约(Contract)解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38997725/