Значение аргумента метода изменяется после вызова метода
Возможно яЯ слишком устал, и яя галлюцинирую или, может быть, тамна самом деле что-то не так с C # + Mono !!
Я тестировал и отлаживал вJson.Net пока я сталкивался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
argument.I»
м с использованием 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;