2013-06-27 9 views
7

Web APIコントローラクラス があり、Web APIコントローラのWSDLから生成されたプロキシクラスのメソッドを呼び出すと、 が返され、WSDLで定義された型のオブジェクトが返されます。プロキシクラス。asp web api jsonのシリアル化でプライベートプロパティが返される

が、XML/JSONを返すには、プロキシクラスのプライベートメンバーは

民間メンバーが

private string companyField; 

    private string soldBPField; 

    private string fromDateField; 

    private string toDateField; 

    private long succStatusField; 

であり、XMLが返さ含まれています:

<companyField>700</companyField> 
<soldBPField>999000353</soldBPField> 
<fromDateField>01-01-2012</fromDateField> 
<toDateField>01-01-2013</toDateField> 

JSONが返されます同じように

私はglobal.asaxのxmlフォーマッタをf ollows:

var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter; 
xml.UseXmlSerializer = true; 

これを変更XMLはに戻っ:

<company>700</company> 
<soldBP>999000353</soldBP> 
<fromDateField>01-01-2012</fromDate> 
<toDate>01-01-2013</toDate> 

が、JSONはまだいずれかがこの

で私を助けることができるプライベート変数

の名前が含まれています返さ

+0

どのようにプライベートプロパティを持つWSDLを生成していますか?パブリックプロパティのみが通常WSDLにエクスポートされます。 –

+0

これらのフィールドをどこかに公開するパブリックプロパティがないのは確かですか?おそらくそれは '部分的な'クラスで、もう一つの '部分的な'はそれらを公開していますか? Intellisenseはこれらの特性が存在することを示していますか? –

+0

例えば以下のようなプライベートプロパティを公開するパブリックプロパティがあります。property companyFieldは、getterとsetterがcompany.Cを指し示すパブリックプロパティ会社を介して公開されています。intellisenseはプライベートプロパティcompanyFieldを表示しません。 –

答えて

12

タイプが[Serializable]と表示されていますか? Serializableは、シリアライザがプライベートまたはパブリックのすべてのフィールドをシリアル化する必要があることを意味します。 Serializableを削除するか、他の属性を認識することからJSONフォーマッタを停止するには、この行を使用してみてください:

config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver(); 
+0

ありがとう@Youssef Moussaoui 上記の設定が助けになりました:何が間違っていたのか説明できます –

+0

シリアル化可能な作品を削除すると設定を変更します。 configが何をしているのかを知り、このように設定を変更することに否定的な結果があるかどうかを知ることはいいことです。 –

関連する問題