如果我从 XML 反序列化,则会收到以下错误:The initialization of an object or value resulted in an object or value being accessed recursively before it was fully initialized.
我的 F# 代码如下所示:
[<...>]
[<...>]
[<DataContract>]
type DerivedClass() as X = class
inherit BaseClass()
[<DataMember>]
[<Input>]
[<DefaultValue>]
val mutable MemberName: myType
....
我使用 ILSpy 查看结果并获取 init@117 值,该值在初始化之前防止访问。
...
[..., DataContract]
[System.Serializable]
public class DerivedClass : BaseClass
{
[..., DefaultValue, DataMember]
public modulName.myType MemberName;
internal int init@117;
...
我所有的其他类都没有得到 init@ 变量并按预期反序列化。为什么有时会创建 init@ 而有时不会?答案可以帮助我修复我的代码。
编辑
@ 后面的数字代表该类型的源代码行。
编辑 2
引用类型与as
创建 对如此变化的HasSelfReferentialConstructor
责任InstanceMembersNeedSafeInitCheck
...
type DerivedClass() as X = class
...
至
...
type DerivedClass() = class
...
为我解决了这个问题。