3

外部ソースからの 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; }
}

そのまま使用するとSerializerInvalidOperationException

<Info xmlns='http://www.ZomboCorp.com/'>期待されていませんでした。

[XmlElement(Namespace = "http://www.ZomboCorp.com/")]クラス定義に追加すると、 null プロパティを持つSerializer新しいオブジェクトが返されます。Info

4

2 に答える 2

8

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; }
}

その後、正しくデシリアライズされます。

于 2009-01-21T17:02:00.927 に答える
5

xsd.exe (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; }
}
于 2009-01-21T21:06:33.727 に答える