Bunu yapacak bir öznitelik yoktur, ancak bunu çözümleyiciyi özelleştirerek yapabilirsiniz.
Görüyorum ki zaten bir CamelCasePropertyNamesContractResolver. Bundan yeni bir çözümleyici sınıfı türetir ve CreateDictionaryContract()yöntemi geçersiz kılarsanız DictionaryKeyResolver, anahtar adlarını değiştirmeyen bir yedek işlev sağlayabilirsiniz .
İşte ihtiyacınız olan kod:
class CamelCaseExceptDictionaryKeysResolver : CamelCasePropertyNamesContractResolver
{
protected override JsonDictionaryContract CreateDictionaryContract(Type objectType)
{
JsonDictionaryContract contract = base.CreateDictionaryContract(objectType);
contract.DictionaryKeyResolver = propertyName => propertyName;
return contract;
}
}
Demo:
class Program
{
static void Main(string[] args)
{
Foo foo = new Foo
{
AnIntegerProperty = 42,
HTMLString = "<html></html>",
Dictionary = new Dictionary<string, string>
{
{ "WHIZbang", "1" },
{ "FOO", "2" },
{ "Bar", "3" },
}
};
JsonSerializerSettings settings = new JsonSerializerSettings
{
ContractResolver = new CamelCaseExceptDictionaryKeysResolver(),
Formatting = Formatting.Indented
};
string json = JsonConvert.SerializeObject(foo, settings);
Console.WriteLine(json);
}
}
class Foo
{
public int AnIntegerProperty { get; set; }
public string HTMLString { get; set; }
public Dictionary<string, string> Dictionary { get; set; }
}
İşte yukarıdan çıktı. Tüm sınıf özellik adlarının deve harfli olduğuna, ancak sözlük anahtarlarının orijinal büyük / küçük harflerini koruduğuna dikkat edin.
{
"anIntegerProperty": 42,
"htmlString": "<html></html>",
"dictionary": {
"WHIZbang": "1",
"FOO": "2",
"Bar": "3"
}
}