注册

Dm.DmException 序列化与反序列化问题

李波 2023/06/27 735 0

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:银河麒麟 V10
【CPU】:飞腾 FT-2000+/64
【问题描述】*:DM .Net Framework Data Provider 中,Dm.DmException 未实现构造函数 protected DmException(SerializationInfo info, StreamingContext context) : base(info, context) { },此构造函数用于配合 ISerializable 完成对象序列化与反序列化,ISerializable 接口由 Exception 类实现。由于 Dm.DmException 未实现此构造函数,因此其序列化正常(没有重写 GetObjectData 方法,缺失部分自定义信息),而反序列化异常(System.Runtime.Serialization.SerializationException: 未在 ISerializable 类型“Dm.DmException”中找到使用参数(SerializationInfo 或 StreamingContext)的构造函数)。
请补全 Dm.DmException 中序列化与反序列化相关方法。

样例代码:

try { using var c = Dm.DmClientFactory.Instance.CreateConnection(); //请勿改动连接字符串 c.ConnectionString = "Server=0.0.0.0"; //此处引发原始异常,属于正常情况 c.Open(); } catch (Dm.DmException ex) { using var ms = new System.IO.MemoryStream(); var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); formatter.Serialize(ms, ex); ms.Position = 0; try { //此处引发反序列化异常,不应出现此情况 formatter.Deserialize(ms); } catch (System.Exception exds) { var color = System.Console.ForegroundColor; System.Console.ForegroundColor = System.ConsoleColor.Green; System.Console.WriteLine("以下为原始异常,属于正常情况"); System.Console.ForegroundColor = color; System.Console.WriteLine(ex); System.Console.WriteLine(); System.Console.ForegroundColor = System.ConsoleColor.Red; System.Console.WriteLine("以下为反序列化异常,不应出现此情况"); System.Console.ForegroundColor = color; System.Console.WriteLine(exds); System.Console.WriteLine(); System.Console.WriteLine("按任意键退出"); System.Console.ReadKey(true); } }

执行结果:
屏幕截图 20230629 104956.png

回答 0
暂无回答
扫一扫
联系客服