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.