2016-05-14 6 views
0

私が使用しているデータソースは、常にxsi:typeを持つ同じ親クラス(xmlのモデル)を持つデータを送信して、クラスの実際の型を判別します。これは、xsi:型に名前空間を追加するまでうまくいきました。今では、私が何を試しても、それを逆転させません。ここで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

関連する問題