我有一个自定义异常类,如下所示:
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
,但它没有传递我的自定义类属性......
我怎样才能实现这一目标?
答案 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#中)作为该方法的基线。