Я написал объект пользовательского исключения.Причина в том, что я хочу отслеживать дополнительную информацию при возникновении ошибки.Мой объект CLR определен следующим образом:
public class MyException : Exception
{
public override string StackTrace
{
get { return base.StackTrace; }
}
private readonly string stackTrace;
public override string Message
{
get { return base.Message; }
}
private readonly string message;
public string Element
{
get { return element; }
}
private readonly string element;
public string ErrorType
{
get { return errorType; }
}
private readonly string errorType;
public string Misc
{
get { return misc; }
}
private readonly string misc;
#endregion Properties
#region Constructors
public MyException()
{}
public MyException(string message) : base(message)
{ }
public MyException(string message, Exception inner) : base(message, inner)
{ }
public MyException(string message, string stackTrace) : base()
{
this.message = message;
this.stackTrace = stackTrace;
}
public MyException(string message, string stackTrace, string element, string errorType, string misc) : base()
{
this.message = message;
this.stackTrace = stackTrace;
this.element = element;
this.errorType = errorType;
this.misc = misc;
}
protected MyException(SerializationInfo info, StreamingContext context) : base(info, context)
{
element = info.GetString("element");
errorType = info.GetString("errorType");
misc = info.GetString("misc");
}
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info, context);
info.AddValue("element", element);
info.AddValue("errorType", errorType);
info.AddValue("misc", misc);
}
}
Я создал копию этого пользовательского исключения в приложении WP7.Единственная разница в том, что у меня нет определенного метода GetObjectData или конструктора с заданным SerializationInfo.Если я запускаю приложение как есть, я получаю сообщение об ошибке:
Тип «My.MyException» не может быть сериализован.Попробуйте пометить его атрибутом DataContractAttribute и пометить все его элементы, которые вы хотите сериализовать, атрибутом DataMemberAttribute.Если тип является коллекцией, попробуйте пометить его с помощью CollectionDataContractAttribute.
Если я добавлю атрибуты DataContract / DataMember к классу и его соответствующим членам на стороне сервера, я получу сообщение об ошибке, которое говорит:: Тип не может быть ISerializable и иметь атрибут DataContractAttribute.
Как мне сериализовать MyException, чтобы я мог передать его экземпляр моей службе WCF.Обратите внимание, я хочу использовать свой сервис из приложения Android.Из-за этого я не хочу делать что-то слишком ориентированное на Microsoft.Это было моим страхом при работе с DataContract / DataMember.
Большое спасибо за вашу помощь!