在Custom Exception中添加额外的属性以返回AJAX功能

时间:2017-09-18 12:39:17

标签: vb.net exception exception-handling custom-errors custom-error-handling

我有一个自定义异常类,如下所示:

stage.initStyle(StageStyle.UNDECORATED);
     TranslateTransition X=new TranslateTransition(Duration.millis(2000),Parentroot);
        X.setFromX(40);
        X.setToX(0);
        X.play();

我在AJAX响应返回的某些情况下使用它。

在我的AJAX响应的错误函数中,我确定错误属于我的自定义类型:

<Serializable>
Public Class SamException
    Inherits Exception
    Public Sub New()
        ' Add other code for custom properties here.
    End Sub
    Public Property OfferBugSend As Boolean = True

    Public Sub New(ByVal message As String)
        MyBase.New(message)
        ' Add other code for custom properties here.
    End Sub

    Public Sub New(ByVal message As String, ByVal inner As Exception)
        MyBase.New(message, inner)
        ' Add other code for custom properties here.
    End Sub

End Class

如果错误属于我的自定义类型,这允许我将特定响应回发给客户端。

但是......我似乎无法将额外的属性.... ajax code.... .error = function (xhr, text, message) { var parsed = JSON.parse(xhr.responseText); var isSamCustomError = (parsed.ExceptionType).toLowerCase().indexOf('samexception') >= 0; .... etc.... 发布到客户端,以便AJAX代码以不同的方式处理这种情况。

OfferBugSend

显示未定义,如果我检查响应,这是因为console.log("OfferBugSend: " + parsed.OfferBugSend) 仅包含属性:

xhr.responseText

这些属性来自基类ExceptionType Message StackTrace ,但它没有传递我的自定义类属性.​​.....

我怎样才能实现这一目标?

1 个答案:

答案 0 :(得分:3)

Exception类是可序列化的,但它包含一个IDictionary并实现了ISerializable,这需要更多的工作来序列化自定义异常类。

处理这个问题的更简单方法是利用Exception类的Data集合,如下所示:

Public Property OfferBugSend As Boolean
    Get
        Return Data("OfferBugSend")
    End Get
    Set(value As Boolean)
        Data("OfferBugSend") = value
    End Set
End Property

另一种方法是确保派生类还实现ISerializable接口,该接口涉及提供序列化构造函数并重写GetObjectData()。请参阅此other answer(在C#中)作为该方法的基线。