2013-06-27 65 views
7

我有一個網絡API控制器類 和我調用一個方法從從網絡API控制器, 一個WSDL生成代理類和我返回在WSDL中定義類型的對象代理類。asp網絡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

有公開的屬性公開那些私人財產,例如:財產companyField通過公共財產公司公開,該公司有一個getter和setter指向company.C#intellisense不顯示私人財產companyField。 –

回答

12

您的類型是否標記爲[Serializable]?可串行化意味着序列化程序應該序列化所有字段 - 私有的或公共的。嘗試刪除Serializable或者使用這條線從識別屬性停止JSON格式:

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

感謝@Youssef穆薩維 上述設置幫助:你能解釋什麼地方出了問題 –

+0

刪除可串行化的作品,因此設置配置。知道爲什麼配置會執行它的功能並瞭解是否會以這種方式更改配置會產生任何負面影響,這將非常有用。 –