从JSON字符串反序列化异常

时间:2016-04-22 11:05:44

标签: c# asp.net-web-api

我的WebApi抛出了一个内部服务器异常,在客户端我尝试在异常中反序列化结果。

控制器的操作确实:

try
{
    //Do something...
}
catch (Exception ex)
{
    return InternalServerError(ex);
}

在客户端我正在做:

var content = response.Content.ReadAsStringAsync().Result;
var exception = JsonConvert.DeserializeObject<Exception>(content);

但抛出异常:

  

会员&#39; ClassName&#39;没找到。

使用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来自何处,反序列化异常的最佳方法是什么?

修改

为了序列化异常,我创建了一个派生自Exception的新类,并添加了以下代码:

    protected RequestException(SerializationInfo info, StreamingContext context)
    {
    }

    [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
    public override void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        base.GetObjectData(info, context);
    }

但是,原始异常细节,特别是内部异常,将丢失。

1 个答案:

答案 0 :(得分:1)

不要暴露异常本身,使用内部属性创建自己的响应对象,如果异常填充您自己的对象并将其传递给响应。在客户端使用

var content = response.Content.ReadAsStringAsync().Result;
var response = JsonConvert.DeserializeObject<MyResponseObject>(content);