3

XMLSerializer の使用方法を学ぼうとしています。http://msdn.microsoft.com/en-us/library/tz8csy73(v=vs.100).aspxのサンプル コードを使用して VS2010 プロジェクトを作成しました。

このコードは、単純な XML ドキュメントを単純な C# オブジェクトに逆シリアル化することになっています。エラーなしでコンパイルおよび実行されますが、C# オブジェクトの復元に失敗します。すべてのフィールドは 0 または null のままです。

サンプルで必要な .NET Framework 4.0 があります。最後の Console.Write にブレークポイントを設定すると、すべての値が 0 または null であることがわかります。

4

1 に答える 1

4

問題は、サンプル内の XML ファイルです。要素の名前には XML 名前空間がプレフィックスとして付けられているため、シリアライザーは要素をOrderedItem型の未加工フィールドにマップしません。XML ファイル内の名前空間を削除すると、このサンプルは正しく実行されます。

またはOrderedItem、simple.xml ファイルで使用される適切な名前空間を含むように型を修飾することもできます

public class OrderedItem
{
    [XmlElement(Namespace = "http://www.cpandl.com")]
    public string ItemName;
    [XmlElement(Namespace = "http://www.cpandl.com")]
    public string Description;
    [XmlElement(Namespace = "http://www.cohowinery.com")]
    public decimal UnitPrice;
    [XmlElement(Namespace = "http://www.cpandl.com")]
    public int Quantity;
    [XmlElement(Namespace = "http://www.cohowinery.com")]
    public decimal LineTotal;

    // A custom method used to calculate price per item.
    public void Calculate()
    {
        LineTotal = UnitPrice * Quantity;
    }
}
于 2013-03-09T00:43:48.903 に答える