简体   繁体   中英

Unable to clone class object

Here is a case for which cloning of object fails:

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

    public DataRow EntityData
    {
        get;
        set;
    }
}

for cloning I am using extention method( Clone() ) from this SO question :

while cloning MasterClass object following error message thrown at runtime:

Type 'System.Data.DataRow' in Assembly 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.

Any solution how to handle this?

Try adding a parameterless constructor:

public MasterClass()
{
}

Converting DataRow

Assuming you DataRow has a 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的目的,您可能必须将这些值解析为可序列化的自定义类。

您必须实现ISerializable接口(用于序列化),并添加采用(SerializationInfo信息,StreamingContext上下文)的构造函数以进行反序列化。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM