类型& # 39;System.Data.DataRow& # 39;在汇编'数据,版本=4.0.0.0,文化=
本文关键字:版本 文化 数据 Data System DataRow 类型 汇编 | 更新日期: 2023-09-27 18:18:43
在将对象序列化为蒸汽时出现以下错误。
System.Data类型"。DataRow' in Assembly '系统。数据,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089'未标记为可序列化
internal static object CloneObject(object obj)
{
MemoryStream ms = null;
object objClone = null;
try
{
// Create a memory stream and a formatter.
ms = new MemoryStream();
BinaryFormatter bf= new BinaryFormatter();
// Serialize the object into the stream.
bf.Serialize(ms, obj);
// Position stream pointer back to first byte.
ms.Seek(0, SeekOrigin.Begin);
// De serialize into another object.
objClone = bf.Deserialize(ms);
}
finally
{
// Release memory.
if (ms != null)
ms.Close();
}
return objClone;
}
通过读取异常,看起来对象中有一个未序列化的dataRow
。
我如何识别在我的代码中导致此问题的dataRow
?
找到了这个的根本原因…在其中一个类文件中声明了一个全局dataRow变量。类被标记为序列化。
删除该dataRow后,问题已解决。
谢谢,
湿婆
首先,您需要找到从哪里调用这段代码。
在Visual Studio中,你可以右键单击函数名并单击"查找所有引用"——这应该会给你一个开始(参见查找对象、定义和引用的文档)
另一个选择是在调试时使用CallStack来找出调用来自哪里。
如果您正在尝试克隆DataTable
, DataTable.Clone
方法可能是您想要的。
如果要序列化一个类的实例,该类必须标记为[Serializable]。DataRow没有标记,所以你不能序列化DataRow类型的对象。