2015-04-13 2 views
0

Я использую 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); 
+1

Не забудьте использовать 'ToLowerInvariant' вместо' ToLower', так как есть локали, в которых изменяются преобразования в верхнем и нижнем регистре (в первую очередь турецкие). –

+0

Спасибо. Сделаю – Sam

ответ

0

Я только что нашел ответ. Мне не нужно возвращать JArray, если я просто возвращаю массив, содержащий мой объект C#, тогда Web Api 2 сделает все остальное.

Смежные вопросы