C# 指定自定义序列化程序时未反序列化错误详细信息

C# 指定自定义序列化程序时未反序列化错误详细信息,c#,.net,wcf,serialization,fault,C#,.net,Wcf,Serialization,Fault,我正在应用程序中使用自定义的XmlObjectSerializer。为此,我将xmlserializeropertionbehavior替换为MyOperationBehavior,如下所示: public class MyOperationBehavior : DataContractSerializerOperationBehavior { public override XmlObjectSerializer CreateSerializer(Type type, string n

我正在应用程序中使用自定义的
XmlObjectSerializer
。为此,我将
xmlserializeropertionbehavior
替换为
MyOperationBehavior
,如下所示:

public class MyOperationBehavior : DataContractSerializerOperationBehavior
{
    public override XmlObjectSerializer CreateSerializer(Type type, string name, string ns, IList<Type> knownTypes)
    {
        return new MySerializer();
    }

    public override XmlObjectSerializer CreateSerializer(Type type, XmlDictionaryString name, XmlDictionaryString ns, IList<Type> knownTypes)
    {
        return new MySerializer();
    }
}
公共类MyOperationBehavior:DataContractSerializeRopection行为
{
公共重写XmlObjectSerializer CreateSerializer(类型类型、字符串名称、字符串ns、IList knownTypes)
{
返回新的MySerializer();
}
公共重写XmlObjectSerializer CreateSerializer(类型类型、XmlDictionaryString名称、XmlDictionaryString ns、IList knownTypes)
{
返回新的MySerializer();
}
}
问题是,通过这样做,任何故障都将反序列化到非通用的
FaultException
,而不是
FaultException
,并且我无法访问故障的详细信息

在做了一些调查之后,我发现问题的根源在于,通过继承
DataContractSerializerPropertyBehavior
,.NET在内部将FaultFormatter设置为
DataContractSerializerFaultFormatter
,它不知道如何反序列化故障的详细信息(而不是
XmlSerializerFaultFormatter
)。问题肯定不在
MySerializer
中,因为
FaultException
在到达我的
ReadObject
方法之前被抛出

所以我的问题是,我该怎么做才能使WCF正确地反序列化我的故障详细信息?
我曾尝试自己设置FaultFormatter,但没有成功,特别是因为所有这些格式化程序都是内部的。

我找到了一种方法来正确地反序列化FaultExceptions。虽然这很粗糙,使用它我感到有点不舒服,但我想我会分享一下,以防其他人想解决这个问题。我如果有更好的答案,我很乐意听到

为了用我自己的自定义序列化程序替换序列化程序,我所做的是用我自己的
MyOperationBehavior
替换
xmlserializeropertionBehavior
(就像我在网上看到的那样)。但我发现,如果不替换行为,而是将新行为添加到行为列表中,则错误将按预期反序列化。但需要注意的是,
MyOperationBehavior
应放在
xmlserializeropertionBehavior
之前的行为列表中,否则自定义序列化程序不会被使用

description.Behaviors.Insert(0, new MyOperationBehavior());
正如我所说,将这两种行为放在一起听起来可能会导致我不知道的问题,因此,如果您知道此解决方案可能引发的任何冲突,我也很乐意就此获得意见