当我尝试序列化我的客户列表时,我得到了文件
<?xml version="1.0"?>
<Customers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
没有抛出异常。 我很确定它已经有效了,但我可能在某个地方改变了一些东西,现在我不知道为什么它不再起作用了。
我有班级CustomerList
[XmlRoot("Customers")]
[XmlInclude(typeof(Customer))]
public class CustomerList
{
[XmlArray("CustomerList")]
[XmlArrayItem("Customer")]
private List<Customer> Customers = new List<Customer>();
private int position = -1;
...;
}
确实包含客户类的项目
[XmlType("Customer")]
public class Customer
{
private string name = string.Empty;
private string surname = string.Empty;
private string phone = string.Empty;
private string email = string.Empty;
[XmlElement("Name")]
public string Name
{
get { return name; }
set { name = value; }
}
[XmlElement("Surname")]
public string Surname
{
get { return surname; }
set { surname = value; }
}
[XmlElement("Phone")]
public string Phone
{
get { return phone; }
set { phone = value; }
}
[XmlElement("Email")]
public string Email
{
get { return email; }
set { email= value; }
}
...;
}
这是用
序列化的private static Type[] extra = { typeof(Customer) };
private XmlSerializer serializer = new XmlSerializer(typeof(CustomerList), extra);
public void Serialize(CustomerList Customers)
{
System.IO.FileStream fs = new System.IO.FileStream(filename, System.IO.FileMode.Create);
serializer.Serialize(fs, Customers);
fs.Close();
}
答案 0 :(得分:2)
您的变量都是私有的。 XmlSerializer
只能序列化公共属性和字段。来自documentation:
XML序列化是将对象的公共属性和字段转换为串行格式(在本例中为XML)以进行存储或传输的过程。
以后:
要控制生成的XML,可以将特殊属性应用于类和成员。例如,要指定不同的XML元素名称,请将
XmlElementAttribute
应用于公共字段或属性,并设置ElementName
属性。
我建议您将私有字段转换为公共属性(而不是公共字段)。