类型& # 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 ?

类型& # 39;System.Data.DataRow& # 39;在汇编'数据,版本=4.0.0.0,文化=

找到了这个的根本原因…在其中一个类文件中声明了一个全局dataRow变量。类被标记为序列化。

删除该dataRow后,问题已解决。

谢谢,

湿婆

首先,您需要找到从哪里调用这段代码。

在Visual Studio中,你可以右键单击函数名并单击"查找所有引用"——这应该会给你一个开始(参见查找对象、定义和引用的文档)

另一个选择是在调试时使用CallStack来找出调用来自哪里。

如果您正在尝试克隆DataTable, DataTable.Clone方法可能是您想要的。

如果要序列化一个类的实例,该类必须标记为[Serializable]。DataRow没有标记,所以你不能序列化DataRow类型的对象。