Tôi có đoạn mã sau:Tại sao tôi nhận được lỗi serialization?
class Program
{
static void Main(string[] args)
{
string xml = @"<ArrayOfUserSetting>
<UserSetting>
<Value>Proposals</Value>
<Name>LastGroup</Name>
</UserSetting>
<UserSetting>
<Value>Visible</Value>
<Name>WidgetsVisibility</Name>
</UserSetting>
</ArrayOfUserSetting>";
List<UserSetting> settings =
GetObjFromXmlDocument<List<UserSetting>>(xml);
}
public static T GetObjFromXmlDocument<T>(string xml)
{
T customType;
XmlSerializer serializer = new XmlSerializer(typeof(T));
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
using (XmlNodeReader xmlNodeReader = new XmlNodeReader(xmlDocument))
{
customType = (T)serializer.Deserialize(xmlNodeReader);
}
return customType;
}
}
[Serializable]
public class UserSetting
{
public string Value { get; set; }
public string Name { get; set; }
}
Mã này hoạt động tốt và các cuộc gọi đến GetObjFromXmlDocument mang lại một bộ sưu tập danh sách. Tuy nhiên, tôi luôn nhận được ngoại lệ cơ hội đầu tiên của loại System.IO.FileNotFoundException
trong mscorlib.dll, khi XmlSerializer serializer = new XmlSerializer(typeof(T));
được thực thi.
Vì vậy, tôi đã đi vào Gỡ lỗi/Ngoại lệ và bật Trợ lý gỡ lỗi được quản lý. Tôi đã nhận như sau trên dòng đó:
Việc lắp ráp với 'mscorlib.XmlSerializers' hiển thị tên không tải trong 'LoadFrom' ràng buộc bối cảnh của AppDomain với ID 1. Nguyên nhân của sự thất bại là: System. IO.FileNotFoundException: Không thể tải tệp hoặc lắp ráp 'mscorlib.XmlSerializers, Phiên bản = 2.0.0.0, Văn hóa = trung lập, PublicKeyToken = b77a5c561934e089' hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy các tập tin được chỉ định. File name: 'mscorlib.XmlSerializers, Version = 2.0.0.0, Culture = trung tính, PublicKeyToken = b77a5c561934e089'
Ai đó có thể giải thích tại sao điều này xảy ra? Có điều gì tôi có thể làm cho lớp học UserSetting
để làm cho vấn đề biến mất không? Ứng dụng khá nhạy cảm với hiệu suất và tôi không muốn có ngoại lệ.
Cảm ơn, điều này rất hữu ích! Thêm vào vấn đề, nếu bạn thấy điều này trong khi gỡ lỗi, chỉ cần nhấn F5 và chương trình của bạn sẽ tiếp tục đi (nó sẽ không sụp đổ ... ít nhất là không b/c này). –