Столбец MySQL JSON и сериализация с типом [duplicate]

Для нас эта ошибка произошла из-за непреднамеренного сериализации объектов 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 */
8
задан Soner Gönül 7 April 2015 в 13:54
поделиться

1 ответ

Установите JsonSerializerSettings.MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead .

Согласно документации :

Этот пример десериализует JSON с MetadataPropertyHandling, установленным в ReadAhead, так что свойства метаданных не должны быть в начале объекта.

 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.

Для обсуждения того, почему это может быть необходимо, см. ТипNameHandling осторожность в Newtonsoft Json .

12
ответ дан dbc 23 August 2018 в 00:38
поделиться
  • 1
    Спасибо, я проверю его после выходных, но я уверен, что это сработает:] Будет обновлено, если нет. – Shy Peleg 9 April 2015 в 22:37
Другие вопросы по тегам:

Похожие вопросы: