2

В моих классах контроллеров у меня есть много методов, которые выводят правильно отформатированные данные JSON. Все они выполняют запрос базы данных. .Entity Framework выводит XML вместо JSON

// GET api/User 
public IEnumerable<Object> GetUsers() 
{ 
    var query = from user in db.Users 
       orderby user.Name 
       select new { Name = user.Name}; 

    return query.AsEnumerable<Object>(); 
} 

Теперь я хотел бы вернуть свойства одного из моих классов.

public IEnumerable<Object> GetProperties() 
{ 
    return typeof(MyClass) 
     .GetProperties(BindingFlags.Public | BindingFlags.Instance) 
     .Select(p => p.Name).ToList(); 
} 

Однако вместо outputing JSON Entity Framework дает мне XML как

<ArrayOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
    <string>Property1</string> 
    <string>Property2</string> 
</ArrayOfstring> 

Я попытался преобразовать вывод в методе контроллера.

public string GetProperties() 
{ 
    var results = typeof(ComplexInfo) 
     .GetProperties(BindingFlags.Public | BindingFlags.Instance) 
     .Select(p => p.Name).ToList(); 
    return JsonConvert.SerializeObject(results, Formatting.Indented, 
     new JsonSerializerSettings { 
      PreserveReferencesHandling = PreserveReferencesHandling.Objects 
     }); 
} 

К сожалению, он по-прежнему выводит XML.

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">[ 
    "Property1", 
    "Property2", 
]</string> 

Как я могу восстановить объекты JSON с контроллера?

+0

Вы используете web-api? –

+0

@ J29 да web-api. – Explicat

+0

Можете ли вы показать свой код для фактического запроса. Также вы всегда хотите вернуть json? – ASG

ответ

3

Я также столкнулся с такой же проблемой в своей веб-ави. решение - вам нужно удалить XmlFormatter из WebApiConfig.

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 

     var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes. 
     FirstOrDefault(t => t.MediaType ==  "application/xml"); 
    config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType); 
} 
} 
Смежные вопросы