簡體   English   中英

列表XML的C#序列化

[英]C# Serialization of a List XML

我在序列化對象列表(在我的情況下,類類型為User的列表)時遇到問題。

    [Serializable()]
    public class User 
    {
        string Fname { get; set; }
        string Lname { get; set; }
        string Address { get; set; }
        string City { get; set; }
        string State { get; set; }
        int Zip { get; set; }
        string Phone { get; set; }
        string Email { get; set; }

        public User(string f, string l, string a, string c, string s, int z, string p, string e)
        {
            Fname = f;
            Lname = l;
            Address = a;
            City = c;
            State = s;
            Zip = z;
            Phone = p;
            Email = e;
        }

        public User() { }
    }

我試圖用來將列表序列化為XML文件的代碼僅生成具有Class(User)名稱的XML文件,而沒有其他內容。

{
    string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    string fullpath = System.IO.Path.Combine(path, "Users.txt");
    Stream stream = File.OpenWrite(fullpath);
    XmlSerializer writer = new XmlSerializer(typeof(List<User>));

    writer.Serialize(stream, Users);
}

我到底在做什么錯。 只是要清楚,這是為了家庭作業。 我不知該如何更改以將數據存儲到文件中。 謝謝。

嘗試這個

    [Serializable()]
    public class User 
    {
        public string Fname { get; set; }
        public string Lname { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public int Zip { get; set; }
        public string Phone { get; set; }
        public string Email { get; set; }

        public User(string f, string l, string a, string c, string s, int z, string p, string e)
        {
            Fname = f;
            Lname = l;
            Address = a;
            City = c;
            State = s;
            Zip = z;
            Phone = p;
            Email = e;
        }

        public User() { }
    }

為了能夠序列化/反序列化一個類,序列化器需要一個無參數的構造函數。 因此,您只需將無參數構造函數添加到您的類中

    public class User
    {
        public string Fname { get; set; }
        public string Lname { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public int Zip { get; set; }
        public string Phone { get; set; }
        public string Email { get; set; }

        // parameterless constructor. There is no need to declare it. 
        public User() { }
        static void Main(string[] args)
        {
            User n = new User();
            n.Fname = "fname";
            n.Lname = "lname";
            n.Address = "address";
            n.City = "city";
            n.State = "state";
            n.Zip = 1;
            n.Phone = "phone";
            n.Email = "email";
            SaveXML.SaveData(n, "xml.xml");
        }
        class SaveXML
        {
            public static void SaveData(object obj, string filename)
            {
                // initialization of XML serializer.
                XmlSerializer sr = new XmlSerializer(obj.GetType());
                // get stream from string
                TextWriter writer = new StreamWriter(filename);
                // Serialization 
                sr.Serialize(writer, obj);
                writer.Close();
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM