我在阅读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());
}
答案 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;
}
}