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