XmlSerializer.serialize()仅创建标头

时间:2014-03-29 10:26:24

标签: c# xml-serialization xmlserializer

当我尝试序列化我的客户列表时,我得到了文件

<?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();
}

1 个答案:

答案 0 :(得分:2)

您的变量都是私有的。 XmlSerializer只能序列化公共属性和字段。来自documentation

  

XML序列化是将对象的公共属性和字段转换为串行格式(在本例中为XML)以进行存储或传输的过程。

以后:

  

要控制生成的XML,可以将特殊属性应用于类和成员。例如,要指定不同的XML元素名称,请将XmlElementAttribute应用于公共字段或属性,并设置ElementName属性。

我建议您将私有字段转换为公共属性(而不是公共字段)。