Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何序列化Azure服务总线中的异常?_C#_.net_Serialization_Azure Webjobs_Azureservicebus - Fatal编程技术网

C# 如何序列化Azure服务总线中的异常?

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

我正在尝试将WebJob执行结果的异常发送到响应队列:

        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上的错误消息。