113 lines
3.4 KiB
C#
113 lines
3.4 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Diagnostics;
|
|||
|
|
|||
|
namespace Unity.Cloud
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Represents a serializable exception.
|
|||
|
/// </summary>
|
|||
|
public class SerializableException
|
|||
|
{
|
|||
|
#region Constructors
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Creates a new instance of the <see cref="SerializableException"/> class.
|
|||
|
/// </summary>
|
|||
|
public SerializableException()
|
|||
|
{
|
|||
|
// Empty
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Creates a new instance of the <see cref="SerializableException"/> class.
|
|||
|
/// </summary>
|
|||
|
/// <param name="exception">The exception.</param>
|
|||
|
public SerializableException(Exception exception)
|
|||
|
{
|
|||
|
// Message
|
|||
|
this.Message = exception.Message;
|
|||
|
|
|||
|
// Full Text
|
|||
|
this.FullText = exception.ToString();
|
|||
|
|
|||
|
// Type
|
|||
|
Type exceptionType = exception.GetType();
|
|||
|
this.Type = exceptionType.FullName;
|
|||
|
|
|||
|
// Stack Trace
|
|||
|
this.StackTrace = new List<SerializableStackFrame>();
|
|||
|
StackTrace stackTrace = new StackTrace(exception, true);
|
|||
|
foreach (StackFrame stackFrame in stackTrace.GetFrames())
|
|||
|
{
|
|||
|
this.StackTrace.Add(new SerializableStackFrame(stackFrame));
|
|||
|
}
|
|||
|
|
|||
|
// Problem Identifier
|
|||
|
if (this.StackTrace.Count > 0)
|
|||
|
{
|
|||
|
SerializableStackFrame stackFrame = this.StackTrace[0];
|
|||
|
this.ProblemIdentifier = string.Format("{0} at {1}.{2}", this.Type, stackFrame.DeclaringType, stackFrame.MethodName);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
this.ProblemIdentifier = this.Type;
|
|||
|
}
|
|||
|
|
|||
|
// Detailed Problem Identifier
|
|||
|
if (this.StackTrace.Count > 1)
|
|||
|
{
|
|||
|
SerializableStackFrame stackFrame1 = this.StackTrace[0];
|
|||
|
SerializableStackFrame stackFrame2 = this.StackTrace[1];
|
|||
|
this.DetailedProblemIdentifier = string.Format("{0} at {1}.{2} from {3}.{4}", this.Type, stackFrame1.DeclaringType, stackFrame1.MethodName, stackFrame2.DeclaringType, stackFrame2.MethodName);
|
|||
|
}
|
|||
|
|
|||
|
// Inner Exception
|
|||
|
if (exception.InnerException != null)
|
|||
|
{
|
|||
|
this.InnerException = new SerializableException(exception.InnerException);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Properties
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Gets or sets the detailed problem identifier.
|
|||
|
/// </summary>
|
|||
|
public string DetailedProblemIdentifier { get; set; }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Gets or sets the full text.
|
|||
|
/// </summary>
|
|||
|
public string FullText { get; set; }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Gets or sets the inner exception.
|
|||
|
/// </summary>
|
|||
|
public SerializableException InnerException { get; set; }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Gets or sets the message.
|
|||
|
/// </summary>
|
|||
|
public string Message { get; set; }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Gets or sets the problem identifier.
|
|||
|
/// </summary>
|
|||
|
public string ProblemIdentifier { get; set; }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Gets or sets the stack trace.
|
|||
|
/// </summary>
|
|||
|
public List<SerializableStackFrame> StackTrace { get; set; }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Gets or sets the type.
|
|||
|
/// </summary>
|
|||
|
public string Type { get; set; }
|
|||
|
|
|||
|
#endregion
|
|||
|
}
|
|||
|
}
|