以下是克隆对象失败的情况:
[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'未标记为可序列化。
任何解决方案如何处理?
答案 0 :(得分:2)
尝试添加无参数构造函数:
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;
}
}
答案 1 :(得分:2)
根据您使用DataRow的内容,您可能需要将值解析为可序列化的自定义类。
答案 2 :(得分:1)
您必须实现ISerializable接口 - 用于序列化,并添加构造函数(SerializationInfo info,StreamingContext context) - 用于反序列化。