Использование DynamicProxy
2.2 Мне кажется, я вижу эту проблему:
"Наследуемые атрибуты для виртуальных свойств недоступны на прокси"
http://support.castleproject.org/projects/DYNPROXY/issues/view/DYNPROXY-ISSUE-109
У меня есть базовый класс с виртуальным свойством.Свойство помечено [XmlIgnore]
.Если я сериализую производный класс, свойство не сериализуется.Но если я создаю прокси для производного класса, свойство сериализуется.Вот простое консольное приложение, показывающее проблему:
using System;
using System.Xml.Serialization;
using Castle.DynamicProxy;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
var derived = new Derived { IsDirty = true, Sample = "ABC"};
derived.Save();
Console.WriteLine("\n\nProxied...\n");
var generator = new ProxyGenerator();
var derivedProxy = generator.CreateClassProxy<Derived>();
derivedProxy.IsDirty = true;
derivedProxy.Sample = "ABC";
derivedProxy.Save();
Console.WriteLine("\n\n");
Console.ReadKey();
}
}
public abstract class Base
{
[XmlIgnore]
public virtual bool IsDirty { get; set; }
public virtual void Save()
{
var ser = new XmlSerializer(this.GetType());
ser.Serialize(Console.Out, this);
}
}
public class Derived : Base
{
public virtual string Sample { get; set; }
}
}
Это ошибка?Или я что-то не так делаю.Быстрый обходной путь - сделать мое свойство IsDirty
не виртуальным.Это может быть приемлемо в сценарии, с которым я работаю, но я бы предпочел, чтобы он был виртуальным.
Спасибо.
Патрик Стил http://weblogs.asp.net/psteele