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ądzenia

Nie 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

questionAnswers(4)

yourAnswerToTheQuestion