Biblioteka klas przenośnych: zalecany zamiennik dla [Serializable]

Przenoszę bibliotekę klasy .NET Framework C # do przenośnej biblioteki klas. Jednym z powtarzających się problemów jest sposób radzenia sobie z klasami ozdobionymi[Serializable] atrybut, ponieważ ten atrybut nie jest częścią podzbioru Portable Class Library. Wydaje się, że funkcjonalność serializacji w podzbiorze Portable Class Library jest objętaDataContractAttribute.

Czy w celu zachowania jak największej funkcjonalności w przenośnej bibliotece klas wystarczy zastąpić[Serializable] z[DataContract] atrybut (co oznacza, że ​​wszystkie pola i właściwości podlegające serializacji będą musiały być ozdobione[DataMember] także)?Co (jeśli w ogóle) będęnie być w stanie zrobić z tym podejściem, które jamogą zrobić z[Serializable] stosowany?Czy istnieje mniej inwazyjne podejście?

Jeśli się uwzględni[DataContract] i[DataMember] są używane, rozważam zmianę kodu w następujących liniach. Czy są jakieś oczywiste wady tego podejścia? Czy jest jakiś sposób na sformułowanie tego samego mniej gadatliwego?

#if PORTABLE
    [DataContract]
#else
    [Serializable]
#endif
    public class SerializableClass : SerializableBaseClass
    {
       ...
#if !PORTABLE
        protected SerializableClass(SerializationInfo info, StreamingContext context)
             : base(info, context)
        {
        }
#endif
        ...
#if PORTABLE
        [DataMember]
#endif
        private Type1 _serializableField;

#if PORTABLE
        [DataMember]
#endif
        private Type2 SerializableProperty { get; set; }

        ...
    }

questionAnswers(3)

yourAnswerToTheQuestion