【问题标题】:Deserializing enum from the Serializationinfo store?从 Serializationinfo 商店反序列化枚举?
【发布时间】:2017-10-11 21:37:35
【问题描述】:

我有一个名为UnitsManager 的课程。在这个类中有一个枚举:

public enum TimeUnit
{
    Seconds,
    Milliseconds,
    Minutes,
    Hours,
    Days,
    Months,
    Years
}

这个枚举用在另一个名为Process 的类中。它有一个属性:

    private TimeUnit cycleTimeUnit = TimeUnit.Seconds; 
    [XmlAttribute("CycleTimeUnit")]
    public TimeUnit CycleTimeUnit
    {
        get { return this.cycleTimeUnit; }
        set { this.cycleTimeUnit = value; }
    }

我正在尝试序列化和反序列化 Process 类。我已经在 Process 类上实现了 ISerializable

    public override void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        base.GetObjectData(info, context);

        info.AddValue("CycleTime", CycleTime);
        info.AddValue("CycleTimeUnit", CycleTimeUnit);
    }

我的问题在于反序列化

    private Process(SerializationInfo info, StreamingContext context)
    {
        CycleTime = info.GetDouble("CycleTime");
        CycleTimeUnit = info.????("CycleTimeUnit"); // <--- ???
    }

如何将其转换为 CycleTimeUnit 类型?

【问题讨论】:

    标签: c# serialization enums


    【解决方案1】:

    试试这个:

    private Process(SerializationInfo info, StreamingContext context)
    {
        CycleTime = info.GetDouble("CycleTime");
        CycleTimeUnit = (TimeUnit) info.GetValue("CycleTimeUnit", typeof(TimeUnit)); 
    }
    

    【讨论】:

    • 几乎! CycleTimeUnit = (TimeUnit)info.GetValue("CycleTimeUnit", typeof(TimeUnit)); 成功了!感谢您的帮助。
    • 不客气,我编辑是为了给未来的正确答案。
    猜你喜欢
    • 2013-09-01
    • 2019-05-31
    • 2015-07-26
    • 1970-01-01
    • 2012-04-14
    • 2021-11-30
    • 1970-01-01
    • 2018-10-11
    • 2014-08-10
    相关资源
    最近更新 更多