Tidak ada atribut untuk melakukan ini, tetapi Anda dapat melakukannya dengan menyesuaikan resolver.
Saya melihat bahwa Anda sudah menggunakan file CamelCasePropertyNamesContractResolver. Jika Anda mendapatkan kelas resolver baru dari itu dan mengganti CreateDictionaryContract()metode, Anda dapat menyediakan DictionaryKeyResolverfungsi pengganti yang tidak mengubah nama kunci.
Berikut kode yang Anda perlukan:
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; }
}
Ini adalah keluaran dari atas. Perhatikan bahwa semua nama properti kelas menggunakan camel-cased, tetapi kunci kamus tetap menggunakan casing aslinya.
{
"anIntegerProperty": 42,
"htmlString": "<html></html>",
"dictionary": {
"WHIZbang": "1",
"FOO": "2",
"Bar": "3"
}
}