Ошибка привязки при десериализации через JSON.Net 4.0 r3 - PullRequest
1 голос
/ 14 ноября 2011

Я пытаюсь десериализовать строку JSON, которая была сериализована самой JSON.Net 4.0 r3. Настройки одинаковы для сериализации и десериализации. Возникает следующее исключение:

Не удалось найти тип «System.Collections.Generic.List`1 [[System.Drawing.PointF, System.Drawing]] 'в сборке' "mscorlib, версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089 "'

После включения «остановить, когда выбрасывается BindingFailure», я вижу, что проблема в следующей части (исходный код JSON.Net, DefaultSerializationBinder.cs):

  if (assemblyName != null)
  {
    Assembly assembly;

#if !SILVERLIGHT && !PocketPC
    // look, I don't like using obsolete methods as much as you do but this is the only way
    // Assembly.Load won't check the GAC for a partial name
#pragma warning disable 618,612
    assembly = Assembly.LoadWithPartialName(assemblyName);
#pragma warning restore 618,612
#else
    assembly = Assembly.Load(assemblyName);
 #endif

    if (assembly == null)
      throw new JsonSerializationException("Could not load assembly '{0}'.".FormatWith(CultureInfo.InvariantCulture, assemblyName));

    Type type = assembly.GetType(typeName); // BindingFailure here
    if (type == null)
      throw new JsonSerializationException("Could not find type '{0}' in assembly '{1}'.".FormatWith(CultureInfo.InvariantCulture, typeName, assembly.FullName));
  }

Ошибка, отображаемая в точке BindingFailure, равна

Не удалось загрузить сборку с отображаемым именем System.Drawing в Контекст привязки «LoadFrom» для AppDomain с идентификатором 1. Причина ошибка: System.IO.FileNotFoundException: не удалось загрузить файл или сборка 'System.Drawing' или одна из ее зависимостей. Система не могу найти указанный файл.

Операционная система - Windows 7, 64-разрядная. Я использую Visual Studio 2010 и ориентируюсь на это приложение для Framework v4. Цель не Silverlight или PocketPC.

Почему в этом случае не удается загрузить "System.Drawing"? С чего мне начать расследование, является ли это проблемой JSON.Net или проблемой с моей установкой Framework 4.0?

Заранее спасибо.

1 Ответ

0 голосов
/ 16 ноября 2011

Оказывается, проблема связана с JSON.Net. Я использовал следующие настройки

jsonSerializerSettings = new JsonSerializerSettings
{
     TypeNameHandling = TypeNameHandling.All
};

Это было из-за предложения в посте (которое включало десериализацию общих коллекций, таких как List). Было высказано предположение, что полная информация о типах поможет с ошибками JSon.Net относительно сообщения об ошибке «Не удается создать абстрактные базовые классы».

Если я поменяю его на

jsonSerializerSettings = new JsonSerializerSettings
{
     TypeNameHandling = TypeNameHandling.Auto
};

работает нормально. Интересно, что некоторая информация о типах не выдается, я не получаю BindingFailure, и десериализация работает нормально. Я понятия не имею, почему он не работал с «Авто» в первую очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...