[英]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 : 我正在使用扩展方法(
Clone()
)从这个SO问题进行 Clone()
:
while cloning MasterClass
object following error message thrown at runtime: 在运行时抛出错误消息
MasterClass
对象时:
Type 'System.Data.DataRow' in Assembly 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.
程序集“ System.Data,版本= 4.0.0.0,区域性=中性,PublicKeyToken = b77a5c561934e089”中的类型“ System.Data.DataRow”未标记为可序列化。
Any solution how to handle this? 任何解决方案如何处理呢?
Try adding a parameterless constructor: 尝试添加无参数的构造函数:
public MasterClass()
{
}
Converting DataRow
转换
DataRow
Assuming you DataRow
has a Table
: 假设您的
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的目的,您可能必须将这些值解析为可序列化的自定义类。
您必须实现ISerializable接口(用于序列化),并添加采用(SerializationInfo信息,StreamingContext上下文)的构造函数以进行反序列化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.