2016-05-14 3 views
0

Источник данных, который я использую, всегда отправляет данные с одним и тем же родительским классом (Модели в xml), с xsi: type, чтобы определить фактический тип класса. Это работает нормально, пока они не начали добавлять пространство имен к типу xsi:. Теперь он не будет deserialize независимо от того, что я пытаюсь.Deserializing xml с несколькими пространствами имен

Вот XML:

<ModelResource xmlns:ot="http://www.example.com/otSpace"> 
    <Models xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance xsi:type="ot:myChildClass"> 
    Stuff here 
    </Models> 
</ModelResource> 

Корневой класс узел

[XmlRoot("ModelResource")] 
public class XmlRoot 
{ 
    [XmlElement("Models")] 
    public List<BaseObject> Bases { get; set; } 
} 

Родительский класс

[XmlInclude(typeof(MyChildClass))] 
public abstract class BaseObject 
{ 
} 

Ребенок

[XmlType(TypeName = "myChildClass", Namespace = "http://www.example.com/otSpace")] 
public class MyChildClass : BaseObject 
{ 
} 

Когда я десериализации этот XML, я ветер с ошибкой:

{ "Указанный тип не был признан: имя = 'myChildClass', пространство имен = 'http://www.example.com/otSpace', в."}

Спасибо за ваша помощь.

ответ

1

Эти классы работают с вашим примером. Я назвал классы так же, как имена элементов просто, чтобы сделать его легче следовать:

public class ModelResource 
{ 
    public Models Models { get; set; } 
} 

[XmlInclude(typeof(MyChildClass))] 
[XmlRoot(Namespace = "")] 
public abstract class Models 
{ 
} 

[XmlType("myChildClass", Namespace = "http://www.example.com/otSpace")] 
public class MyChildClass : Models 
{ 
    [XmlText] 
    public string Value { get; set; } 
} 

this fiddle Смотрите на рабочую демонстрацию.

+0

Спасибо! Явное указание родительского пространства имен на «" - это недостающая часть. Теперь мне приходится иметь дело с тем, что, хотя MyChildClass принадлежит к этому пространству имен, ни одно из его свойств не принадлежит к этому пространству имен, поэтому мне нужно также указать все явно на «», но это просто занятие. – JumboMaximus

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