读取xml到arrayList

时间:2015-04-16 07:44:15

标签: c# xml

我在阅读XML文件时遇到问题。我发现读者只能从XML文件中读取一个客户。我该怎么改变  我的代码允许从XML读取几个客户并存储所有客户  他们到CustomerList。

<?xml version="1.0" encoding="utf-8"?>
<CustomerList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <customers>
    <Customer>
      <Name>Sergii</Name>
      <Surname>Liuk</Surname>
      <MobNumber>26397299</MobNumber>
      <CprNumber>1012853463</CprNumber>
      <Email>sergiiliuk@yahoo.dk</Email>
      <Password>3333</Password>
    </Customer>
    <Customer>
      <Name>Sergii</Name>
      <Surname>Liuk</Surname>
      <MobNumber>26397299</MobNumber>
      <CprNumber>343</CprNumber>
      <Email>sergiiliuk@yahoo.dk</Email>
      <Password>66</Password>
    </Customer>
  </customers>
</CustomerList>



CustomerList customers = new CustomerList();

Customer customer;
protected void Page_Load(object sender, EventArgs e)
{                
       try
       {
             System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(CustomerList));
             System.IO.TextReader reader = new System.IO.StreamReader("d:Customer_register.xml");
             customers = (CustomerList)serializer.Deserialize(reader);

             reader.Close();
             lbl_result.Text = "Data Read Successful";
        }
        catch
        {
             lbl_result.Text = "Reading Fail";
        }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication1.Models
{
    [Serializable]
    public class CustomerList
    {
       public List<Customer> customers;

        public CustomerList()
        {
             customers = new List<Customer>();

        }
        public void addCustomer(Customer customer)
        {
             customers.Add(customer);

        }

    }
}

这就是我试图添加新客户的方式:

CustomerList csl = new CustomerList();
            csl.customers = new List<Customer>();
          Customer  customer = new Customer()
            {

                Name = name_text.Text,
                Surname = surname_text.Text,
                MobNumber = int.Parse(mob_text.Text),
                CprNumber = int.Parse(cpr_text.Text),
                Email = email_text.Text,
                Password = password_text.Text

            };

            csl.customers.Add(customer);

            using (MemoryStream ms = new MemoryStream())
            {
                xs.Serialize(ms, csl);
                File.WriteAllBytes("D:temp.xml", ms.ToArray());
            }

1 个答案:

答案 0 :(得分:2)

客户列表类 - &gt;

public class CustomerList
    {
        public List<Customer> customers { get; set; }
    }

客户类 - &gt;

 [Serializable]
    public class Customer
    {
        public string Name { get; set; }
        public string Surname { get; set; }
        public string MobNumber { get; set; }
        public string CprNumber { get; set; }
        public string Email { get; set; }
        public string Password { get; set; }
    }

序列化:

  CustomerList csl = new CustomerList();
                csl.customers = new List<Customer>();
                Customer cs = new Customer();
    csl.customers.Add(cs);
  XmlSerializer xs = new XmlSerializer(typeof(CustomerList));
            using(MemoryStream ms = new MemoryStream())
            {
                xs.Serialize(ms, csl);
                File.WriteAllBytes("temp.xml", ms.ToArray());
            }

Deserializarion:

using (MemoryStream ms = new MemoryStream(File.ReadAllBytes("XMLFile1.xml")))
            {
               csl =  xs.Deserialize(ms) as CustomerList;
                File.WriteAllBytes("temp.xml", ms.ToArray());
            }

使用Memory Stream,我们可以轻松地反序列化。

现在在你的情况下我认为你有xml作为字符串,所以我们可以解析如下:

 using (MemoryStream stream = new MemoryStream())
            {
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.Write(File.ReadAllText("XMLFile1.xml")); /// replace here with the xml string
                    writer.Flush();
                    stream.Position = 0;
                    csl = xs.Deserialize(stream) as CustomerList;
                }
            }