【问题标题】:Unable to clone class object无法克隆类对象
【发布时间】:2014-01-28 12:34:24
【问题描述】:

以下是对象克隆失败的情况:

[Serializable]
public class MasterClass
{
    public MasterClass(DataRow row)
    {
        EntityData = row;
    }

    public DataRow EntityData
    {
        get;
        set;
    }
}

对于克隆,我正在使用来自此SO question 的扩展方法(Clone()):

在克隆 MasterClass 对象时,出现运行时抛出的错误消息:

在程序集“System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中的类型“System.Data.DataRow”未标记为可序列化。

有什么解决办法吗?

【问题讨论】:

    标签: c# clone


    【解决方案1】:

    根据您使用 DataRow 的目的,您可能必须将值解析为可序列化的自定义类。

    【讨论】:

    • 有没有比将DataRow 转换为自定义可序列化类更简单的方法?
    • 我喜欢 Robert Fricke 的回答(编辑后)。它是最经典的,工作量最少。请记住在使用它们时将它们转换回它们需要的值。
    【解决方案2】:

    尝试添加无参数构造函数:

    public MasterClass()
    {
    }
    

    正在转换DataRow

    假设你DataRow 有一个Table:

    [Serializable]
    public class MyKeyValue {
        public string Key { get; set; }
        public string Value { get; set; }
    }
    
    
    [Serializable]
    public class MasterClass
    {
        public MasterClass() {}
    
        public MasterClass(DataRow row)
        {
            var list = new List<MyKeyValue>();
            foreach (DataColumn col in row.Table.Columns)
            {
                list.Add(new MyKeyValue{Key = col.ColumnName, Value = Convert.ToString(row[col.ColumnName])});
            }
            EntityData = list;
        }
    
        public IEnumerable<MyKeyValue> EntityData
        {
            get;
            set;
        }
    }
    

    【讨论】:

    • 问题不在于类,而在于道具必须是可序列化的。
    • 具有DataRow 参数的构造函数是引导类对象的必须构造函数。还有其他解决方案吗?
    • 你可以有两个构造函数。但是您还需要将DataRow 转换为可序列化的内容。
    • 有什么方法可以将DataRow 转换为serializable 对象?
    • 查看我的编辑,它将DataRow 存储为对象MyKeyValue 的可序列化列表。但是,所有值都从 object 转换为 string。
    【解决方案3】:

    您必须实现ISerializable 接口 - 用于序列化,并添加采用 (SerializationInfo info, StreamingContext context) 的构造函数 - 用于反序列化。

    【讨论】:

      猜你喜欢
      • 2020-05-01
      • 2020-05-06
      • 2017-11-07
      • 2020-10-22
      • 2021-02-13
      • 2011-05-27
      • 2012-05-06
      • 2011-11-07
      相关资源
      最近更新 更多