c# - 我如何选择退出 JSON 契约(Contract)解析器

标签 c# .net json json.net

我们有一个 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/

相关文章:

c# - 并行任务按顺序处理

c# - .resx 表单图标级联更新

c# - ASP.NET Core 处理方法不允许 405

python - 在 Python 中序列化子集合(使用 jsonpickle)

c# - 代表一个不规则形状的游戏世界

c# - 重定向到新的 LoginPage 失败

php - 在MySQL数据库中解析多级JSON文件

javascript - 使用angularjs将json对象传递给python

c# - 帮我把 C++ 结构转换成 C#

c# - LINQ - GroupBy 和项目到新类型?