deserializing मैं इस कोड मिल गया है:अज्ञात प्रकार पर ध्यान न दें जब एक्सएमएल
[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));
}
}
पहले टेस्ट से काम करता है, लेकिन जब मैं दूसरे को चलाने मैं इस त्रुटि मिलती है: यह हो रही करने के बजाय
System.InvalidOperationException : There is an error in XML document (2, 9). ----> System.InvalidOperationException : The specified type was not recognized: name='Hello', namespace='', at .
त्रुटि मैं इसे मान्यता प्राप्त प्रकारों को अनदेखा करना चाहता हूं। क्या इसे करने का कोई तरीका है? इसी तरह की समस्याओं के लिए
मुझे लगा कि यह (एक या [ 'Unknown'- घटनाओं] इस बारे में की सदस्यता का मामला http://msdn.microsoft.com/en-us/ होगा पुस्तकालय/0a51hxdw.aspx), लेकिन कोशिश करने पर ऐसा लगता है कि यह मदद नहीं करता है। रहस्यमय। – AakashM
मैंने यह भी सोचा कि, परिणाम हालांकि खराब हैं। हालांकि मैं एक समाधान खोजने के लिए प्रबंधन नहीं किया था। – flindeberg