为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【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);
}
}
执行结果: