Mein erster Verdacht wurde auf die Umlaute im XML String gelenkt. Also habe ich versucht, diese vorher zu encodieren, aber alles erfolglos.
Hier ist die Methode, die den String deserialisiert:
public static FormularElementWorkflow DeserializeObject(string rowInfo)
{
var newRowInfo = (FormularElementWorkflow)XmlSerializer.Deserialize(new StringReader(rowInfo));
return newRowInfo;
}
Auch meine Versuche den String über einen XmlReader zu deserialisieren:
var reader = System.Xml.XmlReader.Create(new System.IO.StringReader(rowInfo));
und diesen anschließend mit Encodinginformationen zu deserialisieren blieben ebenfalls erfolglos:
public static FormularElementWorkflow DeserializeObject(string rowInfo)
{
var xmlReader = System.Xml.XmlReader.Create(new System.IO.StringReader(rowInfo);
var newRowInfo = (FormularElementWorkflow)XmlSerializer.Deserialize(xmlReader, "utf-8");
return newRowInfo;
}
Erst beim Debuggen (ich habe noch diverse weitere Versuche unternommen mit StringReadern und TextReadern usw.) stellte ich eine weitere Fehlermeldung fest, die darauf hin wies, dass beim Konvertieren des XML Strings ein Typ nicht passen sollte (Fieldtype). Mir fiel daraufhin ein, dass ich ein Enum namens Fieldtype definiert hatte. Also schaute ich mir noch mal die Klasse an, in die der Xml-String serialisiert werden sollte. Hier fand sich ein Autoproperty vom EnumTyp Fieldtype. Die Einträge im Enum wurden alle mit großem Anfangsbuchstaben geschrieben, im Xml-String aber waren die Einträge mit kleinen Buchstaben vorhanden. Dadurch klappte die Konvertierung nicht und deshalb hat der Deserializer ständig einen Fehler im Xml Paket bemängelt.
Ich habe den Typen des Autoproperty auf String geändert und habe an der Stelle im Code, wo ich auf das Enum zugegriffen habe diesen wie folgt abgeändert (formularElementWorkflow.Type ist nun vom Typ string):
...
switch ((Fieldtype)Enum.Parse(typeof(Fieldtype), formularElementWorkflow.Type, true))
...
Damit war mein Problem gelöst und es stellte sich heraus, dass gar nicht die Umlaute innerhalb des Xml-Strings das Problem beim Deserialisieren waren.
Dennoch möchte ich an dieser Stelle auf einen MSDN-Eintrag hinweisen. Dieser beschreibt, dass es zu Deserialisierungsfehlern kommen kann, wenn Control-Characters im Xml-String enthalten sind:
Troubleshooting Common Problems with the XmlSerializer - http://msdn.microsoft.com/en-us/library/aa302290.aspx
Hier wird empfohlen einen XmlReader zu benutzen und das Normalization-Property dieses XmlReaders auf false zu setzen (defaultmäßig steht dieser auf true). Dann sollen sich sich auch Xml-Strings mit Control-Characters deserialisieren lassen.