Как вы думаете, он будет работать
var ele =document.getElementsByClassName('entry')[0]
ele.removeChild(ele.lastChild)
Это кажется ошибкой с CamelCasePropertyNamesContractResolver
. Его базовый класс DefaultContractResolver
имеет два конструктора: конструктор без параметров и версию DefaultContractResolver (Boolean)
(только что устаревшие в Json. NET 7.0). Этот параметр имеет следующее значение:
shareCache
blockquote>
- Тип: System.Boolean Если установлено значение true,
DefaultContractResolver
будет использовать кешированный общий доступ с другими преобразователями тот же тип. Совместное использование кеша значительно улучшит производительность с помощью нескольких экземпляров resolver, потому что дорогое отражение произойдет только один раз. Этот параметр может вызвать неожиданное поведение, если разные экземпляры резольвера предполагают получение разных результатов. Если установлено значение false, настоятельно рекомендуется повторно использовать экземплярыDefaultContractResolver
с помощьюJsonSerializer
.По умолчанию
false
.К сожалению, конструктор по умолчанию для
CamelCasePropertyNamesContractResolver
устанавливает значение вtrue
:public class CamelCasePropertyNamesContractResolver : DefaultContractResolver { public CamelCasePropertyNamesContractResolver() #pragma warning disable 612,618 : base(true) #pragma warning restore 612,618 { NamingStrategy = new CamelCaseNamingStrategy { ProcessDictionaryKeys = true, OverrideSpecifiedNames = true }; } }
Кроме того, нет второго конструктора с
shareCache
. Это нарушает вашSpecificFieldsResolver
.В качестве обходного пути вы можете получить свой резольвер из
DefaultContractResolver
и использоватьCamelCaseNamingStrategy
для отображения имени:public class IndependentCamelCasePropertyNamesContractResolver : DefaultContractResolver { public IndependentCamelCasePropertyNamesContractResolver() : base() { NamingStrategy = new CamelCaseNamingStrategy { ProcessDictionaryKeys = true, OverrideSpecifiedNames = true }; } } public class SpecificFieldsResolver : IndependentCamelCasePropertyNamesContractResolver { // Remainder unchanged }
Обратите внимание, что если вы используете версию Json.NET до 9.0,
CamelCaseNamingStrategy
не существует. Вместо этого вложенное kludgeCamelCasePropertyNamesContractResolver
можно использовать для сопоставления имен:public class IndependentCamelCasePropertyNamesContractResolver : DefaultContractResolver { class CamelCaseNameMapper : CamelCasePropertyNamesContractResolver { // Purely to make the protected method public. public string ToCamelCase(string propertyName) { return ResolvePropertyName(propertyName); } } readonly CamelCaseNameMapper nameMapper = new CamelCaseNameMapper(); protected override string ResolvePropertyName(string propertyName) { return nameMapper.ToCamelCase(propertyName); } }