XmlSerializer在反序列化时抛出异常

时间:2011-10-11 12:43:37

标签: c# .net xml-serialization xmlserializer

我偶然发现.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.

我知道我得到了那个例外,因为我禁用了Visual Studio中的“Just My Code”选项。我实际上想要获得该异常,因此我可以确保为其缺少的项目生成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中的一个错误吗?

我创建了一个testproject并复制了这两个类并对它们进行了反序列化,没有例外。

我的CLR版本是2.0。

如果您需要有关该主题的更多信息,请告诉我如果能帮助我解决此问题,我很乐意提供您需要的任何信息。任何帮助将不胜感激。

提前致谢。

问候,

安德烈

更新

像这里要求的 sll 是Classes

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 :(得分:0)

我相信这是一个预期的错误。 C# XmlSerializer BindingFailure描述了问题及其发生的原因

答案 1 :(得分:0)

我认为您需要在课程中添加 Serializable 属性。

[Serializable()]
public class SerializedClass
{

答案 2 :(得分:0)

您可以尝试为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