2014-01-30 3 views
0

У меня есть иерархия классов, которая унаследована от базового класса. Я хочу десериализовать все типы из XML. Документация говорит, чтобы использовать этот конструктор для этой цели:Десериализация производных типов

XmlSerializer(Type type, Type[] extraTypes); 

Так что я делаю что-то вроде этого:

public class SomeBase { public string SomeProperty { get; set } } 
public class SomeChild : SomeBase { public string SomeOtherProperty { get; set; } } 

Затем я создаю XmlSerializer и попытаться десериализации мой XML:

XmlSerializer serializer = new XmlSerializer(typeof(SomeBase), 
    new Type[] { typeof(SomeChild) }); 
SomeBase deserialized = (SomeBase)serializer.Deserialize(new StringReader(myXml)); 

И Я получаю InvalidOperationException, в котором говорится:

"<SomeChild xmlns=''> was not expected." 

Как я могу это решить?

Update Вот мой XML:

// Works fine: 
<?xml version=\"1.0\" encoding=\"UTF-8\" ?> 
<SomeBase> 
    <SomeProperty>some value</SomeProperty> 
</SomeBase> 
// InvalidOperationException: 
<?xml version=\"1.0\" encoding=\"UTF-8\" ?> 
<SomeChild> 
    <SomeProperty>some value</SomeProperty> 
    <SomeOtherProperty>some other value</SomeOtherProperty> 
</SomeChild> 
+0

Что делает ваш файл XML выглядит? – FlyingFoX

ответ

0

Вы должны указать сериалайзер, что SomeBase также может быть SomeChild. Вы можете сделать это с помощью атрибута XmlInclude

[XmlInclude(typeof(SomeChild))] 
public class SomeBase { public string SomeProperty { get; set } } 
public class SomeChild : SomeBase { public string SomeOtherProperty { get; set; } } 
+0

есть все те же исключения – Waldemar

Смежные вопросы