在C#中序列化和反序列化自定义异常

3
我目前正在处理异常,并创建了一个实现父 Exception 类的自定义异常。
当我尝试序列化或反序列化这样的自定义异常时,问题就出现了。
错误信息如下: "System.Runtime.Serialization.SerializationException: 'Member 'InnerException' was not found.'"
我已经参考了许多互联网上的资料,但无法解决这个问题。我将代码附在此正文中。
[Serializable]
public class CustomException : Exception
{
    public const string DefaultExceptionDescription = "temp";

    public string ExceptionDescription { get; set; }

    public string ReferenceId { get; private set; } = "temp";

    public CustomException(string ExceptionDescription = DefaultExceptionDescription)
    {
        ExceptionDescription = ExceptionDescription;
    }

    [SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
    protected CustomException(SerializationInfo info, StreamingContext context) : base(info, context)
    {
        if (info != null)
        {
            ExceptionDescription = info.GetString(nameof(ExceptionDescription));
            ReferenceId = info.GetString(nameof(ReferenceId));
        }
    }

    [SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
    public override void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        if (info != null)
        {
            info.AddValue(nameof(ExceptionDescription), ExceptionDescription);
            info.AddValue(nameof(ReferenceId), ReferenceId);
        }

        base.GetObjectData(info, context);
    }
}

感谢您的提前支持!


就我所知,它在一个另一个API创建和序列化的“股票”InvalidOperationException上对我进行操作,因此我怀疑它是在您的工作下面的某些东西 - 也就是说,这不是您自定义的Exception,可能是任何Exception的问题。你能解决它吗? - ruffin
除非你正在维护一些非常老的代码,否则你可能想要删除那个 SecurityPermission 属性... https://learn.microsoft.com/en-us/previous-versions/dotnet/framework/code-access-security/security-and-serialization?redirectedfrom=MSDN - AnorZaken
1个回答

1

嗨@Zoidbergseasharp,感谢您的回复。我已经尝试删除Serializable属性,最初它会抛出一个错误,说没有基础构造函数,我已经创建了它,但是它无法正确反序列化。您能帮我解决这个问题吗? - Lalithaditya Kota

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接