如何识别c__DisplayClass未标记为可序列化的位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何识别c__DisplayClass未标记为可序列化的位置相关的知识,希望对你有一定的参考价值。

我试图将一个(非常复杂的)类标记为[Serializable],它涉及查找所有使用的类型并使它们成为[Serializable]。我现在遇到一个例外情况:

Type kAI.Core.kAIXmlBehaviour+<>c__DisplayClass24 is not marked as Serializable.

我该在哪里开始寻找?我一直在尝试识别那些当我没有序列化时不会导致它的元素,但是分支因素是巨大的,我不知道这个DisplayClass24意味着什么或者为什么它是XmlBehaviour的子类。我在某处读到它是一个lambda表达式。这是否意味着我正在尝试存储lambda表达式,或者该类型是在lambda表达式中创建的?

答案

问题是很多事情。首先,我使用的是匿名的getter / setter:

public kAIINodeObject NodeContents
{
   get;
   private set;
}

由于是属性,我无法将其标记为[NonSerialized]。这可以通过简单地制作对象来解决。

SLaks正确地指出事件处理程序正在被序列化,事件可以使用标记

[field: NonSerialized]

最后,this tool对于追踪物体的位置非常有用。

以上是关于如何识别c__DisplayClass未标记为可序列化的位置的主要内容,如果未能解决你的问题,请参考以下文章

调用 lambda 时,“DisplayClass”名称是啥意思?

UserControl 集合未标记为可序列化

持久化未标记为可序列化的对象

“android.runtime.JavaProxyThrowable”是什么意思?我该如何解决?

为可移植 C 库使用 GCC __sync 扩展

错误 - 未标记为可序列化