0

XML を逆シリアル化し、その要素から値を表示しようとしていますが、次のエラーが発生します。

ここに画像の説明を入力

インターネットからいくつかのサンプルを見つけて、必要に応じてコードを編集しようとしましたが、正しく行っていないと思います。以下のクラスとサンプル XML データを参照してください。ご意見やご提案をお待ちしております。

メインフォーム

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    public FileInfo ItemFile
    {
        get
        {
            return new FileInfo(@"C:\Data_120702-015842_440.xml");
        }
    }

    void MainFormLoad(object sender, EventArgs e)
    {
        if (ItemFile.Exists)
        {
            List<Record> lst = new List<Record>();
            XmlSerializer xml = new XmlSerializer(lst.GetType());

            using (Stream s = ItemFile.OpenRead())
            {
                lst = xml.Deserialize(s) as List<Record>;
            }

            _items.Add(item);

            MessageBox.Show(lst[0].Material_Code);
        }
    }
}

記録

public class Record
{
    public string Material_Code;        
    public string Sub_Brand_Code;
    public string Sub_Brand_Text;
    public string Pack_Size_Code;
    public string Pack_Size_Text;
    public string Pack_Type_Code;
    public string Pack_Type_Text;

    public Record()
    {
    }

    public Record(string Material_Code,
              string Sub_Brand_Code,
              string Sub_Brand_Text,
              string Pack_Size_Code,
              string Pack_Size_Text,
              string Pack_Type_Code,
              string Pack_Type_Text
              )

    {
        this.Material_Code = Material_Code;         
        this.Sub_Brand_Code = Sub_Brand_Code;
        this.Sub_Brand_Text = Sub_Brand_Text;
        this.Pack_Size_Code = Pack_Size_Code;
        this.Pack_Size_Text = Pack_Size_Text;
        this.Pack_Type_Code = Pack_Type_Code;
        this.Pack_Type_Text = Pack_Type_Text;

    }
}

XML 構造

<?xml version="1.0" encoding="UTF-8"?>
<MntProdHierAttrMDM>
    <Record>
        <Material_Code>60024517</Material_Code>
        <Sub_Brand_Code>SB000416</Sub_Brand_Code>   
        <Sub_Brand_Text>Zwitsal</Sub_Brand_Text>
        <Pack_Size_Code>PS000224</Pack_Size_Code>
        <Pack_Size_Text>50ML</Pack_Size_Text>
        <Pack_Type_Code>PT000042</Pack_Type_Code>
        <Pack_Type_Text>BOTTLE</Pack_Type_Text>
    </Record>
</MntProdHierAttrMDM>
4

2 に答える 2

2

xml 内の指定された要素に名前空間を追加する必要があります。

逆シリアル化の問題が発生するたびに、シリアライザーに問題を解決してもらいます。オブジェクトをシリアル化するコードを記述し、シリアライザーが生成する xml ファイルを開きます。

シリアル化を実行するコードの例については、http://msdn.microsoft.com/en-us/library/bdxxw552を参照してください。

于 2012-07-02T05:34:35.123 に答える
1
[XmlRoot(ElementName = "MntProdHierAttrMDM")]
public class RecordCollection : List<Record>
{
   public RecordCollection() : base(){}
   public RecordCollection(int capacity) : base(capacity){}
}


void MainFormLoad(object sender, EventArgs e)
{
    if (ItemFile.Exists)
    {
        RecordCollection lst = new RecordCollection();
        XmlSerializer xml = new XmlSerializer(typeof(RecordCollection));

        using (Stream s = ItemFile.OpenRead())
        {
            lst = xml.Deserialize(s) as RecordCollection;
        }

        _items.Add(item);

        MessageBox.Show(lst[0].Material_Code);
    }
}
于 2012-07-02T05:32:27.480 に答える