Sonarcube不喜欢我实现的可序列化异常类



SonarCube向我显示以下异常实现的错误">更新‘ISerializable’的此实现以符合推荐的序列化模式":

[Serializable]
public class UnrecoverableException : Exception, ISerializable
{
public bool Ignore { get; }
public UnrecoverableException()
{
}
public UnrecoverableException(string message, Exception innerException)
: base(message, innerException)
{
}
protected UnrecoverableException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
Ignore= info.GetBoolean(nameof(Ignore));
}
public UnrecoverableException(string message, bool ignore= false) : base(message)
{
Ignore= ignore;
}
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue(nameof(Ignore), Ignore);
base.GetObjectData(info, context);
}
}

不确定这里出了什么问题,因为对我来说,它似乎完全遵循了这里描述的规则https://rules.sonarsource.com/csharp/tag/pitfall/RSPEC-3925

此规则对在不遵循Microsoft推荐的序列化模式的情况下实现ISerializable的类型提出了问题。

  • 缺少System.SerializableAttribute属性。

  • 不可序列化字段未使用System.NonSerializedAttribute属性进行标记。

  • 没有序列化构造函数。

  • 未密封的类型具有不受保护的序列化构造函数。

  • 密封类型的序列化构造函数不是私有的。

  • 未密封类型的ISerializable.GetObjectData既不是公共类型,也不是虚拟类型。

  • 派生类型的序列化构造函数不调用基构造函数。

  • 派生类型具有不调用基方法的ISerializable.GetObjectData方法。

  • 派生类型具有可序列化的字段,但不会重写ISerializable.GetObjectData方法。

要通过Sonarqube的分析,我所要做的就是向类添加[Serializable]属性并添加protected构造函数。即:

[Serializable]
public class BadRequestException : Exception
{
public BadRequestException(string message) : base(message)
{
}
protected BadRequestException(SerializationInfo info, StreamingContext context) : base(info, context)
{
}
}

相关内容

  • 没有找到相关文章

最新更新