【发布时间】:2010-11-23 07:17:28
【问题描述】:
谁能告诉我为什么这个类需要[XmlInclude(typeof(AutoHedgerBaseDataObject))] 才能正确反序列化?我不清楚。
[Serializable]
[XmlInclude(typeof(AutoHedgerBaseDataObject))]
public abstract class AutoHedgerCommandMessage
{
#region Variables
private string myUpdatedBy;
private string myUpdatedTime;
#endregion
#region Constructors
public AutoHedgerCommandMessage(string name)
{
myUpdatedBy = Environment.UserName;
myUpdatedTime = DateTime.Now.ToString("YYYYMMdd HH:mm:ss zzz");
}
#endregion
#region Properties
[XmlElement("updated_by")]
public string UpdatedBy
{
get { return myUpdatedBy; }
set { myUpdatedBy = value; }
}
[XmlElement("updated_time")]
public string UpdatedTime
{
get { return myUpdatedTime; }
set { myUpdatedTime = value; }
}
#endregion
#region Methods
protected T[] ToArrayOfType<T>(IList<string> ids, string source)
where T : AutoHedgerBaseDataObject, new()
{
T[] list = new T[] { };
if (ids != null)
{
list = new T[ids.Count];
for (int i = 0; i < ids.Count; i++)
{
list[i] = new T();
list[i].Id = ids[i];
list[i].Source = source;
}
}
return list;
}
#endregion
}
虽然我们有几个继承自这个基类的类,但只有一个在没有XmlInclude 的情况下无法序列化,这是一个没有可序列化属性或数据并且不调用基类上的任何方法的类。这是反序列化失败的类:
[Serializable()]
[XmlRoot(ElementName = "command")]
public class GetAutoHedgerHedgesCommand : AutoHedgerCommandMessage
{
#region Constructors
// Parameterless constructor for serialization/deserialization
public GetAutoHedgerHedgesCommand()
: base(Name)
{
}
#endregion
#region Constants
public const string Name = "get_autohedger_hedges";
#endregion
}
【问题讨论】:
标签: .net generics serialization inheritance