3

如果我从 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
...

为我解决了这个问题。

4

1 回答 1

4

引用类型as创建 HasSelfReferentialConstructorreponsible for theInstanceMembersNeedSafeInitCheck如此变化

...
type DerivedClass() as X = class
...

...
type DerivedClass()  = class
...

为我解决了这个问题。

于 2017-03-10T11:53:38.537 回答