[英]Unable to clone class object
在这种情况下,对象克隆失败:
[Serializable]
public class MasterClass
{
public MasterClass(DataRow row)
{
EntityData = row;
}
public DataRow EntityData
{
get;
set;
}
}
我正在使用扩展方法( Clone()
)从这个SO问题进行 Clone()
:
在运行时抛出错误消息MasterClass
对象时:
程序集“ System.Data,版本= 4.0.0.0,区域性=中性,PublicKeyToken = b77a5c561934e089”中的类型“ System.Data.DataRow”未标记为可序列化。
任何解决方案如何处理呢?
尝试添加无参数的构造函数:
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的目的,您可能必须将这些值解析为可序列化的自定义类。
您必须实现ISerializable接口(用于序列化),并添加采用(SerializationInfo信息,StreamingContext上下文)的构造函数以进行反序列化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.