Для нас эта ошибка произошла из-за непреднамеренного сериализации объектов SimpleXML.
Если вы используете объекты SimpleXML с 5.3.3, убедитесь, что вы забрасываете значения узлов во все, что вам нужно (например, string), если вы сериализуете значения в сеансе.
До:
$token = $response->Token->Value;
/* token saved in session, results in line 0 error */
После:
$token = (string) $response->Token->Value;
/* token saved in session, no error */
Установите JsonSerializerSettings.MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead
.
Этот пример десериализует JSON с MetadataPropertyHandling, установленным в ReadAhead, так что свойства метаданных не должны быть в начале объекта.
blockquote>string json = @"{ 'Name': 'James', 'Password': 'Password1', '$type': 'MyNamespace.User, MyAssembly' }"; object o = JsonConvert.DeserializeObject(json, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All, // $type no longer needs to be first MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead });
Обратите внимание, что этот параметр будет иметь значение удара .
Наконец, при использовании
TypeNameHandling
выполните обратите внимание на это предостережение от документов Newtonsoft :ТипNameHandling следует использовать с осторожностью, когда ваше приложение десериализует JSON из внешнего источника. Входящие типы должны быть проверены с помощью специального SerializationBinder при десериализации со значением, отличным от None.
blockquote>Для обсуждения того, почему это может быть необходимо, см. ТипNameHandling осторожность в Newtonsoft Json .