2

컨트롤러 클래스에는 올바른 형식의 JSON 데이터를 출력하는 많은 메서드가 있습니다. 모두 데이터베이스 쿼리를 수행합니다. 예.Entity Framework에서 JSON 대신 XML을 출력합니다.

// 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(); 
} 

그러나, 대신 JSON 엔티티 프레임 워크를하고 출력하기의 내게 컨트롤러 방식으로 출력을 변환하기 위해 노력했습니다

<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> 

같은 일부 XML을 제공합니다.

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

웹 API를 사용하고 있습니까? –

+0

@ J29 예 web-api. – Explicat

+0

실제 요청에 대한 코드를 표시 할 수 있습니까? 또한 항상 json을 반환하고 싶습니까? – ASG

답변

3

내 웹 API에서도 동일한 문제가 발생했습니다. 해결책은 WebApiConfig에서 XmlFormatter를 제거해야한다는 것입니다.

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); 
} 
} 
관련 문제