我有以下类层次结构
public class BaseRange { }
public class DayRange : BaseRange {}
public class MonthRange : BaseRange {}
public class Series
{
public BaseRange MyRange { get; set;}
}
我正在序列化Series类,我想要不同的属性名称" MyRange"即日,月。
我有一个IXmlSerializer实现的解决方案,我在其中检查GetObjectData中的typeOf BaseRange并分配相应的名称但是为了维护我需要将它存储在一些静态字符串中的值,我可以在Series protected constructor中使用(在反序列化时使用)
编辑:
[Serializable]
[DataContract]
public class Series : ISerializable
{
private static string _intervalName;
protected Series(SerializationInfo info, StreamingContext context)
{
MyRange = (BaseRange)info.GetValue(_intervalName, typeof(BaseRange));
}
public Series(BaseRange range)
{
MyRange = range;
}
public BaseRange MyRange { get;}
[SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue(GetRangeName(), MyRange, typeof(BaseRange));
}
private string GetRangeName()
{
_intervalName = string.Empty;
if (MyRange is DayRange)
{
_intervalName = "Day";
}
if (MyRange is MonthRange)
{
_intervalName = "Month";
}
return _intervalName;
}
}
我正在寻找更好的方法。