2013-06-27 12 views
7

Mam kontrolera api interfejsu WWW klasy i wywołać metodę klasy proxy wygenerowany z WSDL z kontrolera api sieci web, i zwracam obiekt typu zdefiniowany w WSDL klasa proxy.asp web api serializacja json zwraca właściwości prywatne

ale xml/json powrócił zawiera prywatne członków klasy proxy

prywatne członkowie są

private string companyField; 

    private string soldBPField; 

    private string fromDateField; 

    private string toDateField; 

    private long succStatusField; 

i XML zwrócony jest:

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

JSON zwrócony jest również podobny

Zmieniłem formatator xml w global.asax jako f ollows:

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

zmieniło XML zwrócony do:

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

ale json zwrócony nadal zawiera nazwę zmiennych prywatnych

może ktoś mi pomóc z tym

+0

Jak ty generowania WSDL z prywatnych posesji? Tylko właściwości publiczne są normalnie eksportowane w pliku WSDL. –

+0

Czy jesteś pewien, że nie ma publicznych właściwości, które gdzieś eksponują te pola? Być może jest to klasa "częściowa", a inna "częściowa" je eksponuje? Czy Intellisense pokazuje, że te właściwości istnieją? –

+0

Istnieją publiczne nieruchomości, które ujawniają te prywatne nieruchomości dla np .: property companyField jest narażony za pośrednictwem spółki publicznej nieruchomości, która ma getter i seter wskazując na firmę.C# intellisense nie pokazuje własności prywatnej companyField. –

Odpowiedz

12

Czy Twoje typy są oznaczone jako [Serializable]? Serializowalny oznacza, że ​​serializer powinien serializować wszystkie pola - prywatne lub publiczne. Spróbuj usunąć Serializable albo skorzystać z tej linii, aby zatrzymać formatowania JSON z uznając atrybut:

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

dzięki @Youssef Moussaoui powyższe ustawienie pomogło: czy możesz wyjaśnić, co poszło nie tak –

+0

Usuwanie serializowalnych prac, podobnie jak konfigurowanie konfiguracji. Byłoby miło poznać powód, dla którego konfiguracja wykonuje to, co robi, a także wiedzieć, czy istnieją jakiekolwiek negatywne konsekwencje zmiany tej konfiguracji w ten sposób. –