Warum erhalte ich einen Serialisierungsfehler?
Ich habe den folgenden Code:
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; }
}
Der Code funktioniert einwandfrei und der Aufruf von GetObjFromXmlDocument ergibt eine List-Auflistung. Allerdings bekomme ich immer eine erste Chance Ausnahme vom TypSystem.IO.FileNotFoundException
in mscorlib.dll, wennXmlSerializer serializer = new XmlSerializer(typeof(T));
wird ausgeführt.
So ging ich in Debug / Exception und aktivierte Managed Debugging Assistenten. In dieser Zeile steht:
Die Assembly mit dem Anzeigenamen 'mscorlib.XmlSerializers' konnte im Bindungskontext 'LoadFrom' der AppDomain mit der ID 1 nicht geladen werden. Die Fehlerursache war: System.IO.FileNotFoundException: Datei oder Assembly 'mscorlib' konnte nicht geladen werden. XmlSerializers, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 'oder eine seiner Abhängigkeiten. Die angegebene Datei wurde vom System nicht gefunden. Dateiname: 'mscorlib.XmlSerializers, Version = 2.0.0.0, Kultur = neutral, PublicKeyToken = b77a5c561934e089'
Kann jemand erklären, warum das passiert? Gibt es etwas, das ich mit dem @ machen könntUserSetting
Klasse, um das Problem verschwinden zu lassen? Die Anwendung ist sehr leistungsempfindlich und ich hätte lieber keine Ausnahme.