ich diesen Code haben:ignorieren unbekannte Typen wenn xml Deserialisieren
[XmlType("Metadata")]
[Serializable]
public class MetadataContainer : List<MetadataBase>
{
}
[XmlType("Meta")]
[XmlInclude(typeof(ReadonlyMetadata))]
[Serializable]
public abstract class MetadataBase
{
}
[XmlType("Readonly")]
[Serializable]
public class ReadonlyMetadata : MetadataBase
{
}
[TestFixture]
public class SerializationTests
{
[Test]
public void Can_deserialize_with_known_type()
{
const string text = @"<Metadata xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
<Meta xsi:type=""Readonly"" />
</Metadata>";
var serializer = new XmlSerializer(typeof(MetadataContainer));
var metas = (MetadataContainer)serializer.Deserialize(XmlReader.Create(new StringReader(text)));
Assert.That(metas.Count, Is.EqualTo(1));
Assert.That(metas.First(), Is.InstanceOf<ReadonlyMetadata>());
}
[Test]
public void Can_deserialize_with_unknown_type()
{
const string text = @"<Metadata xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
<Meta xsi:type=""Hello"" />
</Metadata>";
var serializer = new XmlSerializer(typeof(MetadataContainer));
var metas = (MetadataContainer)serializer.Deserialize(XmlReader.Create(new StringReader(text)));
Assert.That(metas.Count, Is.EqualTo(0));
}
}
Der erste Test funktioniert, aber wenn ich den zweiten Lauf bekomme ich diesen Fehler:
System.InvalidOperationException : There is an error in XML document (2, 9). ----> System.InvalidOperationException : The specified type was not recognized: name='Hello', namespace='', at .
Statt dies zu bekommen Fehler Ich möchte, dass nicht erkannte Typen ignoriert werden. Gibt es eine Möglichkeit, dies zu tun?
Ich dachte, dies ein Fall von der Anmeldung zu einem oder mehreren der [ 'Unknown'- Ereignisse] sein würde (http://msdn.microsoft.com/en-us/ Bibliothek/0a51hxdw.aspx), aber beim Versuch es scheint nicht zu helfen. Geheimnisvoll. – AakashM
Ich dachte auch, dass die Ergebnisse seltsam sind. Ich habe jedoch keine Lösung gefunden. – flindeberg