2016-05-14 49 views
0

我使用的數據源始終通過具有相同父類(xml中的模型)的數據與xsi:type一起發送,以確定類的實際類型。這一直工作正常,直到他們開始向xsi:type添加一個名稱空間。現在不管我嘗試什麼,它都不會反序列化。反序列化具有多個名稱空間的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

相關問題