Quelqu'un peut-il me dire pourquoi cette classe nécessite [XmlInclude(typeof(AutoHedgerBaseDataObject))]
de désérialiser correctement? Ce n'est pas clair pour moi.CSharp/DotNet: Sérialisation, Génériques et classes de base
[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
}
Bien que nous ayons plusieurs classes qui héritent de cette classe de base, seul d'entre eux ne parvient pas à sérialiser sans XmlInclude
et qui est une classe qui n'a pas de propriétés sérialisables ou de données et ne remet pas toutes les méthodes sur la base classe. Ceci est la classe qui ne désérialiser:
[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
}