Dynamicznie ignoruj członków danych przed serializacją
Mamy istniejącą usługę WCF, która korzysta z kilku DataContracts. Chcemy zmodyfikować serializację w oparciu o urządzenie, tak aby po uzyskaniu dostępu z urządzeń mobilnych usługa powinna serializować tylko niektóre ważne elementy danych (nie wszystkie)
Mamy tutaj dwie opcje
Twórz osobne umowy dotyczące operacji i danych dla różnych typów urządzeńZamieszaj z rzeczywistą serializacją xml i powstrzymaj tworzenie niepotrzebnych elementów na podstawie urządzeniaNie chcemy korzystać z pierwszej opcji, ponieważ w przyszłości wprowadza wiele nadmiarowych problemów z kodem
Małe badania wykazały, że musimy użyć IXmlSerializable i zastąpić metody readXML () i writeXML (). Ale jednocześnie widziałem, że DataContract i IXmlSerializable nie powinny być używane razem
Doceniony jest każdy przykład bałaganu z rzeczywistą serializacją.
[DataContract]
public class TokenMessage
{
string tokenValue;
string extraValue;
[DataMember]
public string Token
{
get { return tokenValue; }
set { tokenValue = value; }
}
[DataMember]
public string Extra
{
get { return extraValue; }
set { extraValue = value; }
}
}
Teraz, kiedy uzyskuję dostęp do usługi, która zwraca typowy kontrakt danych TokenMessage, z urządzenia mobilnego, nie chcę, aby element danych „Dodatkowy” był serializowany, tzn. Gdy podam inny argument do kontraktu operacji, powinien on być w stanie serializować niektóre / wszystkie elementy danych (w zależności od akcji)
PS: Na razie zignoruj część wykrywania urządzenia. Załóżmy, że mamy argument w kontrakcie operacyjnym, który pomaga nam zidentyfikować urządzenie