也许我太累了,我产生了幻觉,或者 C# + Mono 真的有问题!
当我遇到class 方法时,我正在Json.Net中进行测试和调试。此方法调用另一个名为 的私有方法。传递给的参数之一称为type 。该对象在传递给方法之前已获得值,之后为空!!SetPropertyValue
JsonSerializerInternalReader
CalculatePropertyDetails
CalculatePropertyDetails
reader
JsonReader
CalculatePropertyDetails
我知道这听起来很愚蠢,相信我我并不天真,但是为了看到这种奇怪的行为会发生什么?谁能给出一个合理的解释?我所知道的是这个项目不是多线程的,结果是可重现的。
我得到的唯一证据是调用堆栈顶部的两个条目:
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CalculatePropertyDetails (property={Id}, propertyConverter={JsonRpcTest.ObjectIdConverter}, containerContract={Newtonsoft.Json.Serialization.JsonObjectContract}, containerProperty=(null), reader=(null), target=(null), useExistingValue=false, currentValue=(null), propertyContract=(null), gottenCurrentValue=false) in Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs:792
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue (property={Id}, propertyConverter={JsonRpcTest.ObjectIdConverter}, containerContract={Newtonsoft.Json.Serialization.JsonObjectContract}, containerProperty=(null), reader={Newtonsoft.Json.JsonTextReader}, target={JsonRpcTest.E}) in Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs:750
寻找reader
论据。
我使用的是 Ubuntu 12.04、Mono 3.2.3 和 Monodevelop 4.1.7,项目是使用Mono / .Net 4.5
.
[更新]
SetPropertyValue
这是定义和CalculatePropertyDetails
调用位置的代码的一部分:
private bool SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, object target)
{
object currentValue;
bool useExistingValue;
JsonContract propertyContract;
bool gottenCurrentValue;
if (CalculatePropertyDetails(property, ref propertyConverter, containerContract, containerProperty, reader, target, out useExistingValue, out currentValue, out propertyContract, out gottenCurrentValue))
return false;