繁体   English   中英

我如何选择退出JSON合同解析程序

[英]How can I opt out of a JSON contract resolver

我们有一个Json.NET设置,它将合约解析器设置为CamelCasePropertyNamesContractResolver。 但是,对于某些类型,我想选择退出camelCasing行为。 是否可以通过某种方式注释这些类型来做到这一点?

是的,从Json.Net 版本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"
}

小提琴:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM