Я использую Web Api 2.Newtonsoft LowerCase Formatter не работает
У меня есть следующий код в моем WebApiConfig:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling. Игнорировать;
GlobalConfiguration.Configuration
.Formatters
.JsonFormatter
.SerializerSettings
.ContractResolver = new LowerCaseContractResolver();
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
Если раздел, относящийся к LowerCaseContractResolver относится к:
public class LowerCaseContractResolver : DefaultContractResolver
{
protected override string ResolvePropertyName(string propertyName)
{
return propertyName.ToLower();
}
}
Затем я хочу, чтобы преобразовать C# объект с верхними именами случая к нижнему регистру JObject внутри JArray следующим образом:
string treeString = JsonConvert.SerializeObject(TreeViewLabelWithChildren);
JObject treeJObject = JObject.Parse(treeString);
JArray TreeJarray = new JArray();
TreeJarray.Add(treeJObject);
return TreeJarray;
Возвращенный JArray все еще содержит имена верхнего регистра. Я также попробовал применить пользовательский разрешитель контракта в Application_Start(). Я могу заставить это работать, применяя встроенный графический редактор контрактов, но хотел бы использовать глобальный способ его настройки. Рабочий inline:
var settings = new JsonSerializerSettings();
settings.ContractResolver = new LowerCaseContractResolver();
string treeString = JsonConvert.SerializeObject(TreeViewLabelWithChildren, Formatting.Indented, settings);
Не забудьте использовать 'ToLowerInvariant' вместо' ToLower', так как есть локали, в которых изменяются преобразования в верхнем и нижнем регистре (в первую очередь турецкие). –
Спасибо. Сделаю – Sam