2010-03-02 9 views

Odpowiedz

15

Edytowane: Ustaw setter internal.

To będzie nadal możliwe do ustawienia w zespole, ale jest to fajna sztuczka, która działa dobrze, gdy jest używana na obiektach danych znajdujących się w zespole, który jest zużywany przez innych, ponieważ zużywające się zestawy nie będą w stanie ustawić właściwości, ale różne serializery mogą.

+0

Zabezpieczenie nie pozwoli na ustawienie właściwości spoza klasy, więc deserializacja nadal będzie nieskuteczna ... –

+0

Dzięki Slugster !!! Za odpowiedź ... – BreakHead

+0

@Dan - sprawdź moją edycję. Wiedziałem, że spotkałem się z tym wcześniej, ale musiałem wrócić i sprawdzić, jak sobie z tym poradziłem. Masz rację - początkowo próbowałem * chronić *, ale okazało się, że to nie działa, więc użyłem * wewnętrznego * zamiast tego. – slugster

4

Należy pamiętać, że WCF musi utworzyć instancję obiektu z jego serializowanej reprezentacji (często XML), a jeśli właściwość nie ma programu ustawiającego, nie może przypisać wartości. Obiekty nie są przesyłane między klientem a serwerem, ale tylko serializowane reprezentacje, więc obiekt musi zostać zrekonstruowany na każdym końcu.

2

Twoje pytanie jest trochę niejasne, ale myślę, że jest to odpowiedź szukasz:

domyślne serializacji będzie działać tylko dla właściwości tylko do odczytu, ponieważ nie można nawodnić obiektu bez określania wartości nieruchomości . Jeśli chcesz, aby działał on z właściwością będącą w trybie tylko do odczytu, musisz sam wdrożyć interfejs serializacji, a nie tylko dodawać atrybuty.

Zakładając, że używasz serializacji DataContract, I myśl najlepszą opcją jest wdrożenie ISerializable i samodzielne wdrożenie metod.

Powiązane problemy