2010-01-29 20 views
0

如何使用DataContractSerializer序列化Exception对象列表(还包括派生异常,例如FileNotFoundException)?DataContractSerializer和列表(例外)

我总是得到关于序列化程序不知道列表中的类型的错误,所以我设计了一个解决方法。

它看起来是这样的:

Dim XmlSerializer As New DataContractSerializer(_ 
    ExceptionsList.GetType(), ExceptionsList.Select(Function(i) i.GetType)) 
XmlSerializer.WriteObject(Stream, List) 

这工作。我只是将所有不同的异常类型添加到已知类型的列表中,并且它可以工作。但是在反序列化中,我被卡住了。问题是我不知道事先存储在文件中的例外类型。

回答

0

我认为你是SOL。序列化程序需要知道可能在输入中的类型。您可以尝试使用NetDataContractSerializer。除了要序列化的数据之外,还输出类型元数据。

+0

这个作品谢谢,我想知道你为什么不能用普通的序列化程序来做这件事。 – prof23030 2010-01-30 02:07:37

+0

由于常规序列化程序只是序列化为可互操作的XML。你需要告诉它哪些类型是可能的,否则它不能反序列化。 NetDataContractSerializer通过向XML添加类型元数据来解决这个问题。这也是为什么你不能用它来与非.NET服务或客户进行通信的原因。 – 2010-01-30 02:09:11

+0

我刚刚发现NetDataContractSerializer无法序列化在中等信任(我在共享主机,如果我尝试序列化我得到安全例外),所以我想我会找到另一种方式。 – prof23030 2010-02-02 03:26:13

0

您可能会尝试拆箱进入序列化程序的异常到System.Exception。如果这会产生真正的影响,我不会这样做,但至少这种类型的传递可能会注册为标准。

(在黑暗中拍摄)