首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使自定义.NET异常可序列化的正确方法是什么?

使自定义.NET异常可序列化的正确方法是在.NET类中实现ISerializable接口,如下所示:

代码语言:csharp
复制
using System.Runtime.Serialization;

public class CustomException : Exception, ISerializable
{
    private string message;

    public CustomException(string message) : base(message)
    {
        this.message = message;
    }

    public CustomException(string message, Exception innerException) : base(message, innerException)
    {
        this.message = message;
    }

    protected CustomException(SerializationInfo info, StreamingContext context) : base(info, context)
    {
        message = info.GetString("Message");
    }

    public string Message
    {
        get { return message; }
        set { message = value; }
    }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        if (info == null) throw new ArgumentNullException("info");
        info.AddValue("Message", message);
        base.GetObjectData(info, context);
    }
}

在实现自定义异常时需要确保异常具有描述性,否则在序列化时不推荐自定义异常。另外,自定义异常应该被标记为ISerializable,以允许程序在序列化或反序列化自定义异常时使用自定义元数据(即objectData)。

ISerializable方法:GetObjectDataGetConstructor必须被实现。GetObjectData方法会调用基类的GetObjectData方法,并传递自定义元数据作为参数,同时GetConstructor方法会返回一个创建该类型的新实例的构造方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券