2012-02-09 8 views
2

今後のWCF Web APIでは、JSON出力を制御する方法はありますか?WCF Web 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のために同じことをすることはできますか?参考のため

、ここでXMLのサンプル出力は、です: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> 

、同等の結果がこれです:

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

しかし、私は、プロパティの筐体を変更したいですですから、代わりに次のようなものを好むでしょう:

特定のクラスプロパティを取り除く方法よかった。

答えて

2

WCF Web APIは、デフォルトでDataContractJsonSerializerを使用してJSON形式のリソースを返します。 JSON結果をシェイプするには、DataContract属性とDataMember属性をクラスで使用する必要があります。

[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; } 
} 
関連する問題