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