Highcharts Donutchart: Избегайте показывать дублирующую легенду с вложенными диаграммами

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.
  • Json.NET имеет несколько встроенных стратегий именования, включая: CamelCaseNamingStrategy . Стратегия именования случаев верблюда, которая содержит логику переопределения имен, ранее встроенную в CamelCasePropertyNamesContractResolver. SnakeCaseNamingStrategy . Стратегия именования змеи . DefaultNamingStrategy . Стратегия именования по умолчанию. Имена свойств и словарные ключи не изменяются. Или вы можете создать свой собственный, наследуя от абстрактного базового класса NamingStrategy.
  • Хотя также возможно изменить NamingStrategy экземпляра CamelCasePropertyNamesContractResolver , поскольку последний делится информацией о контракте во всех экземплярах каждого типа , это может привести к неожиданным побочным эффектам, если ваше приложение пытается использовать несколько экземпляров CamelCasePropertyNamesContractResolver. Нет такой проблемы с DefaultContractResolver, поэтому ее безопаснее использовать, когда требуется любая настройка логики корпуса.

0
задан harsha nair 25 February 2015 в 11:01
поделиться