Я расширяю Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver и применяю новый преобразователь в моем WebApi:
public static void Register(HttpConfiguration config)
{
var json = config.Formatters.JsonFormatter.SerializerSettings;
json.ContractResolver = new CustomPropertyNamesContractResolver();
json.Formatting = Formatting.Indented;
config.MapHttpAttributeRoutes();
}
, и вот переопределенный метод моего пользовательского преобразователя имен (CustomPropertyNamesContractResolver class):
protected override string ResolvePropertyName(string propertyName)
{
if (propertyName.Equals("ID"))
return "id";
// return the camelCase
propertyName = base.ResolvePropertyName(propertyName);
if (propertyName.EndsWith("ID"))
propertyName = propertyName.Substring(0, propertyName.Length - 1) + "d";
return propertyName;
}
Моя проблема в том, что результаты действительно в случае верблюда, но свойства, такие как "QuestionID", никогда не преобразуются в "questionId" - то, что я продолжаю получать, это "questionID".
Плюс,Мой пользовательский метод ResolvePropertyName () никогда не вызывается (проверял его с точками останова), поэтому кажется, что только метод ResolvePropertyName () моего родительского класса (CamelCasePropertyNamesContractResolver) вызывается каким-то образом.
Теперь, когда я наследую напрямую отDefaultContractResolver (который является родителем CamelCasePropertyNamesContractResolver) вызывается мой пользовательский метод ResolvePropertyName ().
Может кто-нибудь объяснить мне, что здесь происходит?Я что-то упустил?