Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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
.NET序列化问题_.net_Serialization - Fatal编程技术网

.NET序列化问题

.NET序列化问题,.net,serialization,.net,Serialization,当我尝试序列化我的对象时,我不断得到一个“类型XXX未标记为可序列化”异常。这听起来可能很傻,但我的问题是,在对象图的任何地方(使用调试器悬停窗口),我似乎都找不到对XXX类型对象的任何引用。有人知道一种扫描对象图的好方法吗 这是一个复杂的对象图(100层深),所以我确信某些地方一定有一个类型为XXX的字段,但我就是找不到。您的对象是否派生自类型XXX,或者您试图序列化的类型的属性是否派生自类型XXX?您的对象是否派生自类型XXX,或者您试图序列化的类型的任何属性是否从类型XXX派生?您可以开始

当我尝试序列化我的对象时,我不断得到一个“类型XXX未标记为可序列化”异常。这听起来可能很傻,但我的问题是,在对象图的任何地方(使用调试器悬停窗口),我似乎都找不到对XXX类型对象的任何引用。有人知道一种扫描对象图的好方法吗


这是一个复杂的对象图(100层深),所以我确信某些地方一定有一个类型为XXX的字段,但我就是找不到。

您的对象是否派生自类型XXX,或者您试图序列化的类型的属性是否派生自类型XXX?

您的对象是否派生自类型XXX,或者您试图序列化的类型的任何属性是否从类型XXX派生?

您可以开始检查内部异常的内部异常。通常,当我遇到序列化问题时,在我发现它是类B的属性A之前,我会遇到3或4个嵌套的内部异常,这是类C中的属性,它在某个列表中。

您可能会开始检查内部异常的内部异常。通常,当我遇到序列化问题时,在我发现它是类B的属性A之前,我会遇到3或4个嵌套的内部异常,这是类C中的一个属性,它在某个列表中;在遍历对象图期间发生的事件,如果您有无法序列化的事件连接到这些事件,则会出现此异常。您可以将事件的支持字段标记为不可序列化,以解决此问题:

[field:NonSerializable]
event MyEventHandler MyEvent;

除此之外,如果您发布了类的代码,可能会对我们有所帮助。

还可以查找事件;在遍历对象图期间发生的事件,如果您有无法序列化的事件连接到这些事件,则会出现此异常。您可以将事件的支持字段标记为不可序列化,以解决此问题:

[field:NonSerializable]
event MyEventHandler MyEvent;

除此之外,如果您发布了类的代码,可能会对我们有所帮助。

如果异常没有为您提供足够的信息,[XmlIgnore]属性对于追踪罪犯非常有用

在您试图序列化的对象的所有对象上都使用它。然后一次拆下一个。当对象不再序列化时,您知道问题在于该属性不可序列化。深入该类,将其全部标记为[XmlIgnore],然后重复


最终您会找到它。

如果异常没有为您提供足够的信息,[XmlIgnore]属性对于追踪罪犯非常有用

在您试图序列化的对象的所有对象上都使用它。然后一次拆下一个。当对象不再序列化时,您知道问题在于该属性不可序列化。深入该类,将其全部标记为[XmlIgnore],然后重复


最终您会找到它。

您的另一个选择实际上是调试序列化代码。实现这一点的方法是在序列化调用周围放置一个try/catch,并在catch中设置一个断点。然后,当抛出异常get时,将黄色条拖到调用Serialize get的位置上方的一行,这一次,如果知道代码存储的位置,就可以在序列化代码内设置断点


这是因为Serialize方法实际上是在第一次运行时生成和编译的。您可以在中查看如何执行此操作的更多详细信息。

您的另一个选项实际上是调试序列化代码。实现这一点的方法是在序列化调用周围放置一个try/catch,并在catch中设置一个断点。然后,当抛出异常get时,将黄色条拖到调用Serialize get的位置上方的一行,这一次,如果知道代码存储的位置,就可以在序列化代码内设置断点


这是因为Serialize方法实际上是在第一次运行时生成和编译的。您可以在中看到如何执行此操作的更多详细信息。

是否有嵌套异常?是否有嵌套异常?这是一个复杂的对象图(100层深),因此我确定某些字段属于该类型,但我就是找不到它们。我真的不想装腔作势,但是你想过在Visual Studio中查找所有引用或在解决方案中查找吗?这是一个复杂的对象图(100层深),所以我确信某些字段是那种类型的,但我就是找不到它们。你真的不想变得尖刻,但你想过在Visual Studio中查找所有引用或在解决方案中查找吗?