C# 如何正确设置DataContractSerializer()?

C# 如何正确设置DataContractSerializer()?,c#,C#,这就是我创建序列化程序的方式 public string Serialize(BackgroundJobInfo info) { var serializer = new DataContractSerializer(typeof(BackgroundJobInfo), null, int.MaxValue, true, true, new MongoDbSurrogate()); var stringBuilder = new Stri

这就是我创建
序列化程序的方式

public string Serialize(BackgroundJobInfo info)
{
    var serializer = new DataContractSerializer(typeof(BackgroundJobInfo),
                     null, int.MaxValue, true, true, new MongoDbSurrogate());
    var stringBuilder = new StringBuilder();

    using (var stringWriter = new StringWriter(stringBuilder, CultureInfo.InvariantCulture))
    {
        var writer = XmlWriter.Create(stringWriter);
        serializer.WriteObject(writer, info);
        writer.Flush();
    }

    return stringBuilder.ToString();
}
此后,我开始出现以下例外情况:

类型为
System.Runtime.Serialization.SerializationException的异常

键入System.Collections.ObjectModel.Collection 1[[Replay.Common.Contracts.Transfer.ExcludedWriter,Common.Contracts,Version=1.0.0,Culture=neutral,PublicKeyToken=null]]和数据协定名称ArrayOfeExcludeWriter:http://schemas.datacontract.org/2004/07/Replay.Common.Contracts.Transfer”他说。如果您正在使用DATACONTROTSCORALIZER或将未知类型的任何类型添加到已知类型的列表中,请考虑使用DATACONTracTracver,例如,使用NoNyType属性或将它们添加到传递给序列化器的已知类型的列表中。

我已经在

BackgroundJobInfo
中添加了6个
[KnownType(typeof(some\u type\u in\u exception))]
。我仍然会得到不同类型的相同异常

也许我做错了什么(例如构造函数中的第二个参数(已知类型)必须不同于
null
)?我如何解决我的问题

我已经在BackgroundJobInfo中添加了6[KnownType(typeof(some_type_in_exception))]。我仍然会得到不同类型的相同异常


你的解决方案是有效的。你只是还没有找到全部。没有神奇的方法可以找到它们,你是程序员,你应该知道使用什么类型。您必须继续查找所有异常。

为什么我会得到这些异常?您能解释一下吗?@ivan_petrushenko您会得到这些异常,因为这些类型在编译时无法推断。例如,如果返回类型是接口,就会发生这种情况。您需要将该接口的所有实现作为已知类型返回,因为编译器无法从方法签名中获取它们。
var serializer = new DataContractSerializer(typeof(BackgroundJobInfo), null,
 int.MaxValue, true, true, new MongoDbSurrogate()); // MongoDbSurrogate: IDataContractSurrogate