2012-02-09 3 views
2

다가오는 WCF Web API으로 JSON 출력을 제어 할 수있는 방법이 있습니까?WCF 웹 API로 JSON 형식을 제어하는 ​​방법이 있습니까?

대소 문자를 변경하고 클래스를 직렬화 할 때 특정 속성이 포함되지 않도록하고 싶습니다.

예를 들어,이 매우 간단 클래스를 고려하십시오

[XmlRoot("catalog", Namespace = "http://api.247e.com/catalog/2012")] 
public class Catalog 
{ 
    [XmlArray(ElementName = "link-templates")] 
    public LinkTemplate[] LinkTemplates { get; set; } 
} 

당신이 볼 수 있듯이, 내가 추가 한 다양한 XML은이 XML로 직렬화 어떻게 제어하기 위해 그 속성을. JSON에 대해 동일한 작업을 수행 할 수 있습니까? I는 속성의 케이싱을 변경하려는 그러나

{ 
    "LinkTemplates": 
    [ 
    { 
     "Href":"http:\/\/localhost:9000\/search\/?criterion={criterion}", 
     "Rel":"http:\/\/docs.247e.com\/rels\/search" 
    } 
    ] 
} 

:

JSON 들어
<catalog xmlns="http://api.247e.com/catalog/2012" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <link-templates> 
     <link-template href="http://localhost:9000/search/?criterion={criterion}" 
         rel="http://docs.247e.com/rels/search"/> 
    </link-templates> 
</catalog> 

, 동등한 결과가 이것이다 :

참고로

여기 XML에 샘플 출력이다 따라서 다음과 같은 것을 선호합니다 :

특정 클래스 속성을 제거하는 방법은 b 좋은데.

답변

2

WCF 웹 API는 기본적으로 JSON 형식의 리소스를 반환하기 위해 DataContractJsonSerializer를 사용했습니다. 따라서 DataContract 및 DataMember 특성을 사용하여 JSON 결과를 형성해야합니다.

[DataContract] 
public class Book 
{ 
    [DataMember(Name = "id")] 
    public int Id { get; set; } 
    [DataMember(Name = "title")] 
    public string Title { get; set; } 
    [DataMember(Name = "author")] 
    public string Author { get; set; } 
    [XmlIgnore] // Don't send this one 
    public string ImageName { get; set; } 
} 
관련 문제