My 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