【问题标题】:CSharp/DotNet: Serialization, Generics and base classesCSharp/DotNet:序列化、泛型和基类
【发布时间】: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


    【解决方案1】:

    可能是因为基类或派生类中的某些内容导致您没有在界面中明确提及的项目列表被序列化(此类本身不会暴露任何会直接导致问题的内容)。

    This has been covered pretty completely in a previous question

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 2014-12-20
      • 2015-05-03
      • 1970-01-01
      • 2018-04-27
      相关资源
      最近更新 更多