0
このクラスで[XmlInclude(typeof(AutoHedgerBaseDataObject))]
が正しくデシリアライズする必要がある理由を教えてもらえますか?それは私には分かりません。CSharp/DotNet:シリアライゼーション、ジェネリックス、ベースクラス
[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
せずにシリアル化するために失敗し、それが何のシリアライズ可能なプロパティやデータを持っていないと、ベース上の任意のメソッドを呼び出すことはありませんクラスですクラス。基底クラスや派生クラスで何かがあなたが明示的インターフェイスに言及didntのことをシリアライズする項目のリストを引き起こしているので、(このクラス自体は公開does notのおそらく
[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
}