0

私の問題は、プログラムが XML ファイルからデータを取得してリストに入れていないことです。

データは問題なく保存できますが、元に戻すことはできません。

ここに私の保存機能があります

    public void Save_Data_Click(object sender, EventArgs e)
    {
        XmlSerializer PSR = new XmlSerializer(typeof(Pickup));
        XmlSerializer DSR = new XmlSerializer(typeof(Delivery));

        TextWriter PickupStream = new StreamWriter(@"Pickup Save Data.xml");
        TextWriter DeliveryStream = new StreamWriter(@"Delivery Save Data.xml");
        PSR.Serialize(PickupStream, thePickup);
        DSR.Serialize(DeliveryStream, theDelivery);
        DeliveryStream.Close();
        PickupStream.Close();

        MessageBox.Show("All data saved!");
    }

これが私のxmlロードコードです

  XmlSerializer SerializerObj = new XmlSerializer(typeof(Pickup));
  FileStream ReadFileStream = new FileStream(@"Pickup Save Data.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
  Pickup LoadedObj = (Pickup)SerializerObj.Deserialize(ReadFileStream);
  ReadFileStream.Close();

ここに私のピックアップクラスがあります

 namespace Vans
 {
     [Serializable]
     public class Pickup
     {

    public List<Pickups> Pickups = new List<Pickups>();

    public void addPickup(Pickups Pic)
    {
        Pickups.Add(Pic);
    }

    public List<String> listPickups()
    {
        List<String> listPickups = new List<string>();
        foreach (Pickups pick in Pickups)
        {
            String pickupString = pick.ToString();
            listPickups.Add(pickupString);
        }

        return listPickups;

    }

    public Pickups getPickup(int i)
    {

        int c = 0;
        foreach (Pickups Pic in Pickups)
        {
            if (i == c)
                return Pic;
            c++;
        }
        return null;
    }
 }
}

マイデリバリークラスはピックアップクラスと同じです。

編集

    <?xml version="1.0" encoding="utf-8"?>
    <Pickup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Pickups>
     <Pickups>
      <pickupfirstname>dsf</pickupfirstname>
      <pickuplastname>sdf</pickuplastname>
      <pickupdeliveryaddress>sd</pickupdeliveryaddress>
      <pickuptime>dsf</pickuptime>
    </Pickups>
  </Pickups>
</Pickup>

これはいくつかのサンプル XML コードです

4

2 に答える 2

0

この例では、(逆)シリアル化する必要のあるすべてのフィールドに注釈が付いています。これ[XmlElement]が理由かもしれません...

于 2012-12-04T23:51:19.233 に答える
0

正しく逆シリアルPickups化するには、クラスが次のようになっていることを確認してください。

public class Pickups
{
    public string pickupfirstname;
    public string pickuplastname;
    public string pickupdeliveryaddress;
    public string pickuptime;
}

注:このクラスを含めてコードをローカルでテストしたところ、問題なく動作しています。

于 2012-12-05T09:43:28.113 に答える