无法克隆类对象

时间:2014-01-28 12:34:25

标签: c# clone

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

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

    public DataRow EntityData
    {
        get;
        set;
    }
}

用于克隆我使用此SO question的扩展方法(Clone()):

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

  

键入' System.Data.DataRow'在Assembly&System; System.Data,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'未标记为可序列化。

任何解决方案如何处理?

3 个答案:

答案 0 :(得分:2)

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

public MasterClass()
{
}

转换DataRow

假设您DataRowTable

[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;
    }
}

答案 1 :(得分:2)

根据您使用DataRow的内容,您可能需要将值解析为可序列化的自定义类。

答案 2 :(得分:1)

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