ПостШарп. Как ввести сериализуемое свойство

Мне нужно ввести поле, значение которого должно быть сериализовано с другими полями класса, оформленными аспектом.

Это мой класс:

[Serializable]
[MyAspect(1)]
public MyClass
{
    public int IntField = 0;
}

и это мой аспект:

[Serializable]
public class MyAspect: InstanceLevelAspect
{
    private int _aspectField;

    public MyAspect(int aspectField)
    {
        _aspectField = aspectField;
    }

    [IntroduceMember]
    public int IntroducedProperty { get; set; }
}

После декомпиляции dll я вижу, что IntroducedProperty добавился в определение MyClass, но делегирует все вызовы MyAspect.IntroducedProperty, тем самым своему резервному полю.

Итак, сериализация не видит ни одного поля, соответствующего IntroducedProperty, в MyClass.

Также PostSharp генерирует в MyClass поле типа MyAspect, отмеченное атрибутом NonSerializable.

Есть ли способы ввести поле, которое будет участвовать в сериализации?


person Eugene    schedule 25.03.2014    source источник
comment
Все сериализаторы, которые я когда-либо видел, работают только со свойствами, а не с полями.   -  person Sam Axe    schedule 25.03.2014
comment
Я использую BinaryFormatter, который работает с полями.   -  person Eugene    schedule 25.03.2014


Ответы (1)


Решено здесь: http://support.sharpcrafters.com/discussions/questions/742-how-to-introduce-property-for-serialization

Мне нужно реализовать интерфейс ISerializable в MyClass или ввести этот интерфейс по аспекту

person Eugene    schedule 26.03.2014