XmlSerializer выдает исключение при десериализации - PullRequest
3 голосов
/ 11 октября 2011

Я наткнулся на проблему с .NET XmlSerializer.Всякий раз, когда я пытаюсь десериализовать некоторые из моих классов проектов, я получаю исключение FileNotFound со следующим сообщением:

Could not load file or assembly 'mscorlib.XmlSerializers, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies.
The system cannot find the file specified.

Я знаю, что получаю это исключение, потому что я отключил опцию «Просто мой код»в визуальной студии.Я на самом деле хочу получить это исключение, чтобы убедиться, что я сгенерировал XmlSerializers.dll для проекта, для которого он отсутствует, но, как вы можете видеть в этом случае, это mscorlib.dll.Я не могу понять, в чем проблема.Когда я использую sgen.exe и пытаюсь сгенерировать файл XmlSerializers.dll для проекта, в котором класс, который я пытаюсь десериализовать, я получаю некоторые предупреждения, но генерируется файл XmlSerializers.dll.Класс, который подвергается десериализации, не имеет ничего особенного.Он содержит некоторые свойства следующих типов

2x short
1x string
2x DateTime
1x List<short>
1x List<MyClass>

'MyClass' также не содержит ничего особенного, только некоторые шорты, строку и одно свойство DateTime.

У меня есть другие классы, которые в основном имеюттот же спектр типов данных, и они отлично десериализуются.Может быть, это ошибка в CLR?

Я создал тестовый проект, скопировал 2 класса, десериализовал их и не получил исключений.

Моя версия CLR - 2.0.

Если вам нужна дополнительная информация по этому вопросу, дайте мне знать, я был бы рад предоставить вам все, что вам нужно, если это поможет мне решить эту проблему.Любая помощь будет оценена.

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

Привет,

Андре

Обновление:

Как и sll здесь запрашиваются классы

SerialzedClass:

public class SerializedClass
{
#region Constructor
/// <summary>
/// constructor for serialization only
/// </summary>
public SerializedClass() { }

/// <summary>
/// public constructor
/// </summary>
public SerializedClass(short id, string bez, DateTime updateY, DateTime updateX, short lastID)
{

  this.ID = id;
  this.Bez = bez;
  this.UpdateY = updateY;
  this.UpdateX = updateX;
  this.LoadedSprs = new List<short>();
  this.LoadedHandRefs = new List<TraderHandRef>();
  this.LastID = lastID;

} // SerializedClass

#endregion

public short LastID { get; set; }

public short ID { get; set; }

public string Bez { get; set; }

public DateTime UpdateY { get; set; }

public DateTime UpdateX { get; set; }

public List<short> LanguageIDs { get; set; }

public List<MyClass> MyClass { get; set; }

}

MyClass:

public class MyClass
{

#region Constructor

/// <summary>
/// constructor for serialization only
/// </summary>
public MyClass() { }

#endregion

#region Properties

/// <summary>
/// get/set KID value
/// </summary>
public short KID { get; set; }

/// <summary>
/// get/set Date value
/// </summary>
public DateTime Date { get; set; }

/// <summary>
/// get/set VID value
/// </summary>
public short VID { get; set; }

/// <summary>
/// get/set description value
/// </summary>
public string Description { get; set; }

/// <summary>
/// get/set ID value
/// </summary>
public short ID { get; set; }

#endregion
}

Мой вызов десериализации выглядит следующим образом:

System.Xml.Serialization.XmlSerializer serial = new System.Xml.Serialization.XmlSerializer(typeof(T));

, где T представляет SerializedClass.

Ответы [ 3 ]

0 голосов
/ 11 октября 2011

Я думаю, вам нужно добавить атрибут Сериализуемый для вашего класса.

[Serializable()]
public class SerializedClass
{
0 голосов
/ 11 октября 2011

Вы можете попробовать сгенерировать сборку сериализации для mscorlib:

REM In a Visual Studio Prompt:
sgen /a:C:\Windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll /o:.\x32
sgen /a:C:\Windows\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll /o:.\x64
0 голосов
/ 11 октября 2011

Я считаю, что это ожидаемая ошибка. C # XmlSerializer BindingFailure описывает проблему и почему она возникает

...