【发布时间】:2011-10-11 12:43:36
【问题描述】:
我偶然发现了 .NET XmlSerializer 的一个问题。
每当我尝试反序列化我的一些项目类时,我都会收到带有以下消息的FileNotFound-Exception:
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 中禁用了“仅我的代码”选项。我实际上想要获得该异常,因此我可以确保为缺少它的项目生成 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 这里要求的是类
序列化类:
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; }
}
我的班级:
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。
【问题讨论】:
-
该帖子中的答案对我的问题没有帮助,不过我可以在那里发布我的问题。
-
ok 显示实际执行序列化和反序列化的代码,您反序列化的类型与序列化的类型完全相同吗?
-
查看原帖,我添加了类和序列化调用
标签: c# .net xml-serialization xmlserializer