使用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