如何序列化对象列表

本文关键字:列表 对象 序列化 | 更新日期: 2023-09-27 18:04:28

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Xml.Serialization;
namespace AppPrueba
{
    public partial class Form1 : Form
    {
        ArrayList listaFilas = new ArrayList();
        public Form1()
        {
            InitializeComponent();
        }
        List<Empleados> emp = new List<Empleados>();
        List<Agenda> agen = new List<Agenda>();
        static public void SerializeToXML(List<Agenda> agen)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<Agenda>));
            TextWriter textWriter = new StreamWriter(@"C:'agenda.xml");
            serializer.Serialize(textWriter, agen);
            textWriter.Close();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog(this);
            string strfilename = openFileDialog1.FileName;
            txtPath.Text = strfilename;
            if ((strfilename.Trim().Length > 0) && (File.Exists(strfilename)))
            {
                string[] readText = File.ReadAllLines(strfilename);
                if (strfilename.EndsWith("Agenda.txt"))
                {
                    lstLinesBeforeChange.Items.Clear();
                    foreach (string s in readText)
                    {
                        lstLinesBeforeChange.Items.Add(s);
                    }
                }
                else
                {
                    lstLinesBeforeChange.Items.Clear();
                    foreach (string s in readText)
                    {
                        lstLinesBeforeChange.Items.Add(s);
                    }
                }
            }
        }
        private void btnModify_Click(object sender, EventArgs e)
        {
            string strfilename = txtPath.Text;
            string[] readText = File.ReadAllLines(strfilename);
            if (strfilename.EndsWith("Agenda.txt"))
            {
                lstLinesAfterChange.Items.Clear();
                foreach (string s in readText)
                {
                    int nroEmp = Convert.ToInt32(s.Substring(0, 4));
                    string nombre = s.Substring(4, 15);
                    string telef = s.Substring(19, 10);
                    string ciudad = s.Substring(29);
                    Agenda unAgenda = new Agenda();
                    unAgenda.NroEmp = nroEmp;
                    unAgenda.Nombre = nombre.TrimStart().TrimEnd();
                    unAgenda.Telefono = telef;
                    unAgenda.Localidad = ciudad;
                    agen.Add(unAgenda);
                    agen.Sort(delegate(Agenda a1, Agenda a2)
                    {
                        return a1.NroEmp.CompareTo(a2.NroEmp);
                    });
                }
                foreach (Agenda a in agen)
                {
                    string agenOrd = a.NroEmp.ToString() + "'t" + a.Nombre + "'t" + a.Telefono + "'t" + a.Localidad;
                    lstLinesAfterChange.Items.Add(agenOrd);
                }
            }
            else
            {
                lstLinesAfterChange.Items.Clear();
                foreach (string s in readText)
                {
                    string[] sSinBarra = s.Split('|');
                    int nroEmp = Convert.ToInt32(sSinBarra[0]);
                    string nombre = sSinBarra[1];
                    string posicion = sSinBarra[2];
                    int nroOficina = Convert.ToInt32(sSinBarra[3]);
                    int piso = Convert.ToInt32(sSinBarra[4]);
                    string fechaIng = sSinBarra[5];
                    int dia = Convert.ToInt32(fechaIng.Substring(0, 2));
                    int mes = Convert.ToInt32(fechaIng.Substring(2, 2));
                    int año = Convert.ToInt32(fechaIng.Substring(4, 4));
                    string fechaIngreso = dia + "/" + mes + "/" + año;
                    fechaIng = fechaIngreso;
                    Empleados unEmpleado = new Empleados();
                    unEmpleado.NroEmpleado1 = nroEmp;
                    unEmpleado.Nombre1 = nombre.TrimEnd().TrimStart();
                    unEmpleado.Posicion = posicion.TrimEnd().TrimStart();
                    unEmpleado.NroOficina = nroOficina;
                    unEmpleado.Piso = piso;
                    unEmpleado.FechaIngreso = fechaIngreso;
                    emp.Add(unEmpleado);
                    emp.Sort(delegate(Empleados e1, Empleados e2)
                    {
                        return e1.NroEmpleado1.CompareTo(e2.NroEmpleado1);
                    });
                }
                foreach (Empleados em in emp)
                {
                    string empOrd = em.NroEmpleado1.ToString() + "'t" + em.Nombre1 + "'t" + em.Posicion + "'t" + em.NroOficina.ToString()
                        + "'t" + em.Piso.ToString() + "'t" + em.FechaIngreso;
                    lstLinesAfterChange.Items.Add(empOrd);
                }
            }
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            //SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            //saveFileDialog1.ShowDialog();
            //if (saveFileDialog1.FileName != "")
            //{
            //    FileStream fs = (FileStream)saveFileDialog1.OpenFile();
            //    fs.Close();
            //}
            SerializeToXML(agen);
        }
    }
}

我有这个,我想序列化到xml两个列表:

List<Empleados> emp = new List<Empleados>();
List<Agenda> agen = new List<Agenda>();

我使用SerializeToXML方法,我发现在其他教程,但当我运行它一个错误显示

"错误1可访问性不一致:参数类型"System.Collections.Generic。List'则不太容易访问比方法C:'Users'722825'Desktop'Santi AppPrueba.Form1.SerializeToXML (System.Collections.Generic.List)"Cosas'AppPrueba'AppPrueba' form .cs 27 28 AppPrueba"

如果你能帮助我,提前感谢!

如何序列化对象列表

您试图序列化为xml的所有类都应该是公共的。对于集合序列化,不能使用泛型——要么使用无类型的集合,比如ArrayList,要么创建一个非泛型的后代类List。

agen为private static, SerializeToXML为public static。需要agen public

您的错误显示变量List agen = new List();public List agen = new List();