Json.NET 9.0.1 внедрил иерархию классов NamingStrategy
для решения этой проблемы. Он извлекает логику алгоритмического переназначения имен свойств из распознавателя контрактов в отдельный, легкий класс, который позволяет контролировать, были ли словарные ключи , явно заданными именами свойств и имена расширений (в 10.0.1 ) перепутаны.
Используя DefaultContractResolver
и настройку NamingStrategy
в экземпляр CamelCaseNamingStrategy
вы можете создать JSON с именами свойств с верблюжьим именем и немодифицированными словарными клавишами:
var resolver = new DefaultContractResolver { NamingStrategy = new CamelCaseNamingStrategy { ProcessDictionaryKeys = false, OverrideSpecifiedNames = true } };
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = resolver;
Примечания:
CamelCasePropertyNamesContractResolver
также указывает, что .Net-члены с явно указанными именами свойств (например, те, где JsonPropertyAttribute.PropertyName
установлены) должны иметь свои имена повторно: public CamelCasePropertyNamesContractResolver()
{
NamingStrategy = new CamelCaseNamingStrategy
{
ProcessDictionaryKeys = true,
OverrideSpecifiedNames = true
};
}
Выше resolver
сохраняет это поведение. Если вы этого не хотите, установите OverrideSpecifiedNames = false
. CamelCaseNamingStrategy
. Стратегия именования случаев верблюда, которая содержит логику переопределения имен, ранее встроенную в CamelCasePropertyNamesContractResolver
. SnakeCaseNamingStrategy
. Стратегия именования змеи . DefaultNamingStrategy
. Стратегия именования по умолчанию. Имена свойств и словарные ключи не изменяются. Или вы можете создать свой собственный, наследуя от абстрактного базового класса NamingStrategy
. NamingStrategy
экземпляра CamelCasePropertyNamesContractResolver
, поскольку последний делится информацией о контракте во всех экземплярах каждого типа , это может привести к неожиданным побочным эффектам, если ваше приложение пытается использовать несколько экземпляров CamelCasePropertyNamesContractResolver
. Нет такой проблемы с DefaultContractResolver
, поэтому ее безопаснее использовать, когда требуется любая настройка логики корпуса.