ns-prefixed要素を持たない接頭辞付きの名前空間を持つXMLドキュメントをデシリアライズする方法は?
-
19-08-2019 - |
質問
外部ソースからのXMLドキュメントがあります。
<?xml version="1.0" encoding="utf-8"?>
<ns0:Info xmlns:ns0="http://www.ZomboCorp.com/">
<Name>Anthony</Name>
<Job>Developer</Job>
</ns0:Info>
このようなオブジェクトにデシリアライズする必要があります。
public class Info
{
public String Name { get; set; }
public String Job { get; set; }
}
そのまま使用すると、Serializer
はInvalidOperationException
<Info xmlns='http://www.ZomboCorp.com/'>
は予期されていませんでした。
[XmlElement(Namespace = "http://www.ZomboCorp.com/")]
をクラス定義に追加すると、Info
はnullプロパティを持つ新しい<=>オブジェクトを返します。
解決 2
xsd.exe (a VSツール)、XMLファイルからスキーマを生成し、次にスキーマからクラスファイルを生成しました。提案しました
[XmlType(AnonymousType = true, Namespace = "http://www.ZomboCorp.com/")]
[XmlRoot(Namespace = "http://www.ZomboCorp.com/", IsNullable = false)]
public class Info
{
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public String Name { get; set; }
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public String Job { get; set; }
}
しかし、私は逃げることができました
[XmlType(AnonymousType = true)]
[XmlRoot(Namespace = "http://www.ZomboCorp.com/")]
public class Info
{
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public String Name { get; set; }
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public String Job { get; set; }
}
他のヒント
XmlElement属性を各プロパティにも追加し、Namespaceプロパティを空の文字列に設定する必要があります(状況ではネームスペースが継承されないため)。
Infoの定義は次のようになります。
XmlRoot(Namespace = "http://www.ZomboCorp.com/")]
public class Info
{
[XmlElement(Namespace = "")]
public String Name { get; set; }
[XmlElement(Namespace = "")]
public String Job { get; set; }
}
その後、正しくデシリアライズされます。
所属していません StackOverflow