我写了一个自定义的异常对象。这是因为我想在发生错误时跟踪附加信息。我的CLR对象的定义如下:错误序列化CLR对象以用于WCF服务
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应用程序中创建这个定制xception的副本。唯一的区别是,我没有定义GetObjectData方法或定义了SerializationInfo的构造函数。如果我按原样运行应用程序,则会收到一条错误消息:
类型'My.MyException'无法序列化。考虑使用DataContractAttribute属性标记它,并使用DataMemberAttribute属性标记要序列化的所有成员。如果类型是一个集合,请考虑使用CollectionDataContractAttribute来标记它。
如果我添加了DataContract /的DataMember属性的类和服务器端的相应的成员,我收到一个错误,指出: 类型不能ISerializable的和具有DataContractAttribute属性。
如何序列化MyException,以便我可以将它的实例传递给我的WCF服务。请注意,我想使用我的服务从Android应用程序。正因为如此,我不想做任何过于以微软为中心的事情。这是我对DataContract/DataMember的担心。
非常感谢您的帮助!
我试图序列化异常的原因是因为我传递一个异常到WCF服务。原因是因为我正在捕获移动应用程序中发生的异常,并且想将它们登录到我的服务器上,所以我知道在哪里寻找错误。据说,我该怎么做? – user208662 2011-02-05 17:10:02
为什么不改用“ex.ToString()”? – 2011-02-05 17:12:47