Я переношу библиотеку классов .NET Framework С# в портативную библиотеку классов. Одна повторяющаяся проблема заключается в том, как обращаться с классами, украшенными атрибутом [Serializable], так как этот атрибут не является частью подмножества Portable Class Library. Функциональность сериализации в подмножестве Portable Class Library, по-видимому, покрывается DataContractAttribute.
- Чтобы сохранить как можно большую функциональность в библиотеке портативных классов, достаточно заменить
[Serializable]на атрибут[DataContract](подразумевая, что все поля и свойства, подлежащие сериализации, должны быть украшены[DataMember])? - Что (если что-либо) будет ли я не иметь возможность использовать этот подход, который я может выполнять с помощью
[Serializable]? - Есть ли менее навязчивый подход?
Учитывая, что используются [DataContract] и [DataMember], я рассматриваю возможность изменения кода в следующих строках. Есть ли очевидные недостатки в этом подходе? Есть ли способ сформулировать одно и то же менее подробное?
#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; }
...
}