C# 如何序列化Azure服务总线中的异常?
我正在尝试将WebJob执行结果的异常发送到响应队列:C# 如何序列化Azure服务总线中的异常?,c#,.net,serialization,azure-webjobs,azureservicebus,C#,.net,Serialization,Azure Webjobs,Azureservicebus,我正在尝试将WebJob执行结果的异常发送到响应队列: var message = new BrokeredMessage(exception); outputMessages.Add(message); 我的异常类表示一个逻辑错误: public class MyException : Exception{ public MyException(){} public MyException(string message) : base(mess
var message = new BrokeredMessage(exception);
outputMessages.Add(message);
我的异常类表示一个逻辑错误:
public class MyException : Exception{
public MyException(){}
public MyException(string message) : base(message){}
public MyException(string message, Exception inner) : base(message, inner){}
protected MyException(SerializationInfo info, StreamingContext context) : base(info, context){}
public object MyProp { get; set; }
}
但是,我得到以下例外情况:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException:异常
执行函数时:Functions.ProcessQueueMessage2Async-->
System.Runtime.Serialization.InvalidDataContractException:类型
“MyException”无法序列化。考虑将它标记为
DataContractAttribute属性,并将其所有成员标记为
希望使用DataMemberAttribute属性序列化。如果类型
是一个集合,考虑用
CollectionDataContractAttribute。请参阅Microsoft.NET Framework
其他支持类型的文档
当我用[DataContract]
标记MyException
时,我得到以下信息:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException:异常
执行函数时:Functions.ProcessQueueMessage2Async-->
System.Runtime.Serialization.InvalidDataContractException:类型
“MyException”无法ISerializable且具有DataContractAttribute
属性
可能是因为
System.Exception
实现了ISerializable
。如何修复此问题?您将无法使用DataContractSerializer
序列化异常。即使您成功地将类标记为DataContract
,内部异常也可以是任何类型,因此不兼容
所以你有两个选择:
流
传递给代理消息
构造函数)。有关一些选项,请参见您将无法使用
DataContractSerializer
序列化异常。即使您成功地将类标记为DataContract
,内部异常也可以是任何类型,因此不兼容
所以你有两个选择:
流
传递给代理消息
构造函数)。有关一些选项,请参见“将异常[…]发送到响应队列”-收件人真的需要整个异常对象吗?或者使用
.ToString()
,或者状态代码,或者一些自定义消息包会更好吗?恐怕我不能使用字符串或枚举,因为我需要传递额外的信息(MyProp
,在我的示例中)来正确格式化UI上的错误消息。“向响应队列发送异常[…]”-收件人真的需要整个异常对象吗?或者使用.ToString()
,或者状态代码,或者一些自定义消息包会更好吗?恐怕我不能使用字符串或枚举,因为我需要传递额外的信息(MyProp
,在我的示例中)来正确格式化UI上的错误消息。