Трудности SOAP сериализации

Рейтинг: 2Ответов: 1Опубликовано: 18.05.2011

Есть класс с атрибутом Serializable, некоторые поля которого помечены атрибутом NonSerialized, и есть у этого класса поле с типом bool. Вопрос заключается в следующем: если это поле равно true - сериализуются все поля класса, если false, то те поля, которые помечены как NonSerialized, не сериализуются. Как переопределить атрибуты, чтобы использовать для сериализации SoapFormatter, а не XmlSerializer?

Ответы

▲ 2

Класс для сериализации, где поле ToSerialize сериализуется в зависимости от значения флага IsSerialized:

[Serializable]
class Some: ISerializable
{
    public bool IsSerialized;
    public string ToSerialize;

    public Some()
    {
    }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("IsSerialized", IsSerialized);
        if (IsSerialized)
            info.AddValue("ToSerialize", ToSerialize);
    }

    protected Some(SerializationInfo info, StreamingContext context)
    {
        IsSerialized = info.GetBoolean("IsSerialized");

        if (IsSerialized)
            ToSerialize = info.GetString("ToSerialize");
    }
}

Сам код сериализации:

Some some = new Some();
Stream stream = File.Open("data.xml", FileMode.Create);
SoapFormatter formatter = new SoapFormatter();

formatter.Serialize(stream, some);
stream.Close();
some = null;

PS: Код не тестировался.