|
43
|
| Andras Zoltan · 技术社区 · 13 年前 |
|
|
1
56
这很有趣。。。
当我更仔细地查看异常的堆栈跟踪时,我注意到
因此,序列化程序似乎在做:
因此,在这种情况下,Json.Net正在调用我的转换器,而转换器又在调用Json.Net序列化程序,然后它会爆炸,因为它看到它已经在序列化传递给它的对象!
在DLL上打开ILSpy(是的,我知道它是开源的,但我想要“callers”功能!)并从
值得庆幸的是
现在一切都很好。 然而,这样做的结果是,如果您打算对对象进行一些自定义JSON序列化,并且正在为其注入转换器 和 您打算在某些或所有情况下回退到标准序列化机制;那么你不能这样做,因为你会欺骗框架,让它认为你试图存储一个循环引用。
我确实试过操纵
这可能是Json.Net中的一个bug——好吧,这是一个非常边缘的情况,它有从宇宙边缘掉下来的危险——但如果你真的发现自己处于这种情况,那么你就有点被卡住了! |
|
|
2
8
我在使用Newtonsoft.Json的4.5.7.15008版本时遇到了这个问题。我尝试了这里提供的所有解决方案以及其他一些解决方案。我使用下面的代码解决了这个问题。基本上,您可以使用另一个JsonSerializer来执行序列化。创建的JsonSerializer没有任何注册的转换器,因此将避免重新进入/异常。如果使用了其他设置或ContractResolver,则需要在创建的序列化上手动设置它们:可以将一些构造函数参数添加到CustomConverter类中以适应这种情况。
|
|
|
3
2
我自己刚刚遇到这个,我沮丧地把头发拔了出来!
为了解决这个问题,以下对我有效,但因为我错过了
例如,这与我原来的类类似:
副本如下所示:
WriteJson是:
编辑:
OP指出,使用
Expando
可能是另一种可能的解决方案。这样做效果很好,省去了创建新类的麻烦,尽管DLR支持需要Framework 4.0或更高版本。方法是创建一个新的
|
|
4
1
我刚刚在Parent/Child收藏中遇到了同样的问题,并找到了解决我问题的帖子。我只想显示父集合项的列表,不需要任何子数据,因此我使用了以下内容,效果很好:
它还引用了Json.NET密码丛页面,位于: |
|
|
5
1
IMO,这是图书馆的一个严重限制。解决方案很简单,尽管我承认我并没有那么快想到。解决方案是设置:
正如到处记录的那样,它将消除自引用错误,并用堆栈溢出代替它。在我的情况下,我需要写入功能,所以将CanWrite设置为false不是一个选项。最后,当我知道对序列化程序的调用将导致(无休止的)递归时,我只设置了一个标志来保护CanConvert调用:
|
|
|
6
0
这可能会对某些人有所帮助,但在我的情况下,我试图重写Equals方法,使我的对象被视为值类型。在我的研究中,我发现JSON.NET不喜欢这样: |
|
|
7
0
我的是一个简单的错误,与这个问题的解决无关。 这个话题是谷歌的第一页,所以我在这里发帖,以防其他人和我有同样的问题。
|