首页 > 解决方案 > Json.Net - 为单个属性调整字典键序列化

问题描述

我正在使用带有 CamelCaseNamingStrategy 的 DefaultcontractResolver 来序列化我的字典。由于我无法控制的原因,我暂时必须将单个字典序列化为 PascalCase。然而,我似乎无法让它工作。

我设置我的序列化程序如下

        var defaultSerializerSettings = new JsonSerializerSettings
        {
            ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
            NullValueHandling = NullValueHandling.Ignore,
            Converters = new List<JsonConverter> { new Newtonsoft.Json.Converters.StringEnumConverter(new CamelCaseNamingStrategy()) },
        };
        defaultSerializerSettings.ContractResolver = new DefaultContractResolver
        {
            NamingStrategy = new CamelCaseNamingStrategy
            {
                OverrideSpecifiedNames = true,
                ProcessDictionaryKeys = true
            }
        };

我的测试类有两个字典,一个应该是默认序列化的,所以 camelCase 带有字典键,然后一个应该是 camelCase 但只留下字典键

    internal class TestClass
    {
        [JsonProperty(NamingStrategyType = typeof(CamelCaseNamingStrategy), NamingStrategyParameters = new object[] { true, false })]
        public Dictionary<string, string> CSVImportFileFieldMapping { get; set; }

        public Dictionary<string, string> CSVImportFileFieldMapping2 { get; set; }
    }

然后我创建一个测试对象并序列化它

    var pb = new TestClass
    { 
        CSVImportFileFieldMapping = new Dictionary<string, string> { { "Hello", "World" }, { "Gaga", "Gugu" } },
        CSVImportFileFieldMapping2 = new Dictionary<string, string> { { "Hello", "World" }, { "Gaga", "Gugu" } },
    };
    var jsonString = JsonConvert.SerializeObject(pb, defaultSerializerSettings);

然而,这两个字典的键都是pascalCased。

知道我在这里缺少什么吗?

标签: c#dictionaryjson.netjson-serialization

解决方案


推荐阅读