1
我的WebApi拋出一個內部服務器異常,並在客戶端中,我試圖反序列化返回異常的結果。從JSON字符串反序列化異常
控制器的操作一樣:
try
{
//Do something...
}
catch (Exception ex)
{
return InternalServerError(ex);
}
並在客戶端我做:
var content = response.Content.ReadAsStringAsync().Result;
var exception = JsonConvert.DeserializeObject<Exception>(content);
但會拋出異常:
會員 '類名' 不找到。
檢查與Json2csharp的背景下,我得到了以下對象:
public class InnerException
{
public string Message { get; set; }
public string ExceptionMessage { get; set; }
public string ExceptionType { get; set; }
public string StackTrace { get; set; }
}
public class RootObject
{
public string Message { get; set; }
public string ExceptionMessage { get; set; }
public string ExceptionType { get; set; }
public string StackTrace { get; set; }
public InnerException InnerException { get; set; }
}
那麼,是ClassName
來自哪裏,什麼是反序列化異常的最好方法?
EDIT
要序列我創建從Exception
衍生的新的類,並添加以下代碼除外:
protected RequestException(SerializationInfo info, StreamingContext context)
{
}
[SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info, context);
}
然而,原始異常的詳細信息,特別是內部異常,是丟失。
看起來是序列化的例外是派生類型,因此它比類型異常更多的屬性,爲此它不能被反序列化這樣 - 你必須到解串器提供反序列化異常的確切類型 –
我不知道C#,但通常你不會返回一個原始的服務器端異常到前端 - 因爲你正在捕獲它,爲什麼不返回更友好的用戶界面,而不會暴露你的類名和服務器端堆棧跟蹤? – pherris
你可以發佈你的JSON字符串嗎? – Mainak