2013-06-27 29 views
7

Tôi có lớp điều khiển api Web và tôi gọi một phương thức trên lớp proxy được tạo từ WSDL từ bộ điều khiển api trên web, và tôi trả về một đối tượng kiểu được xác định trong WSDL lớp proxy.serialization api json asp trả về thuộc tính riêng

nhưng xml/json trở chứa các thành viên private của lớp proxy

các thành viên tư nhân

private string companyField; 

    private string soldBPField; 

    private string fromDateField; 

    private string toDateField; 

    private long succStatusField; 

và xml trở là:

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

các json trở là cũng tương tự

Tôi đã thay đổi trình định dạng xml trong global.asax thành f OLLOWS:

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

này đã thay đổi XML trở lại:

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

nhưng json trở vẫn chứa tên của các biến riêng

có thể bất kỳ một giúp tôi với điều này

+0

Bạn tạo WSDL bằng tài sản riêng như thế nào? Chỉ các thuộc tính công khai thường được xuất trong WSDL. –

+0

Bạn có chắc chắn không có thuộc tính công khai để lộ những trường đó ở đâu đó không? Có lẽ đó là một lớp 'partial' và một phần' phần' khác đang phơi bày chúng? Intellisense có chỉ ra rằng những thuộc tính đó tồn tại? –

+0

có các thuộc tính công khai hiển thị các thuộc tính riêng đó cho ví dụ: thuộc tính companyField được hiển thị thông qua công ty sở hữu công cộng có công cụ getter và setter trỏ tới company.C# intellisense không hiển thị companyField thuộc sở hữu riêng. –

Trả lời

12

Các loại của bạn có được đánh dấu là [Serializable] không? Serializable có nghĩa là serializer nên serialize tất cả các lĩnh vực - tư nhân hoặc công cộng. Hãy thử xóa Serializable hoặc người nào khác sử dụng dòng này để ngăn trình định dạng JSON nhận ra thuộc tính:

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

nhờ @Youssef Moussaoui cài đặt ở trên đã giúp: bạn có thể giải thích những gì đã xảy ra không. –

+0

Xóa các tác phẩm có thể tuần tự hóa và do đó, hãy đặt cấu hình. Nó sẽ được tốt đẹp để biết lý do tại sao cấu hình làm những gì nó làm và cũng biết nếu có bất kỳ hậu quả tiêu cực để thay đổi cấu hình theo cách này. –

Các vấn đề liên quan