public class Person  {       string firstname;       string lastname;       int age;            public string FirstName       {           get { return firstname; }           set { firstname = value; }       }            public string LastName       {           get { return lastname; }           set { lastname = value; }       }            public int Age       {           get { return age; }           set { age = value; }       }   } 将要被序列化的数据对象:
private List<Person> GeneratePersonData()   {       List<Person> data = new List<Person>();       data.Add(new Person() { FirstName = "Kate", LastName = "Brown", Age = 25 });       data.Add(new Person() { FirstName = "Tom", LastName = "Stone", Age = 63 });       data.Add(new Person() { FirstName = "Michael", LastName = "Liberty", Age = 37 });       return data;   } 
// Write to the Isolated Storage  XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();  xmlWriterSettings.Indent = true;      using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())   {       using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("People.xml", FileMode.Create))       {           XmlSerializer serializer = new XmlSerializer(typeof(List<Person>));           using (XmlWriter xmlWriter = XmlWriter.Create(stream, xmlWriterSettings))          {               serializer.Serialize(xmlWriter, GeneratePersonData());          }       }   } 
问题一:怎样把这个处理过程封装成一个方法???是不是封装成下面这样???
/// <summary>
        /// 创建和读取XML文件
        /// </summary>
        /// <param name="xmlname">XML文件名</param>
        /// <param name="obj">模型实体类</param>
        public void CreateAndWriteXML(string xmlname,object obj)
        {
            XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
            xmlWriterSettings.Indent = true;
            using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile(xmlname, FileMode.Create))
                {
                    [color=#FF0000]XmlSerializer serializer = new XmlSerializer(typeof(object)); 
                    问题二:这里在原方法中是“ XmlSerializer serializer = new XmlSerializer(typeof(List<Person>)); ”,“List<Person>”在这里只能用一个参数表示,请问这个参数怎样定义,才可以让它传进来???//object指传入类的List集合

                    using (XmlWriter xmlWriter = XmlWriter.Create(stream, xmlWriterSettings))
                    {
                        //serializer.Serialize(xmlWriter, GeneratePersonData()); GenerateEntityData()指实体的List对象
                    }
                }
            }
        }[/color]

解决方案 »

  1.   

    利用泛型定义序列化与反序列化,以下是我用到的,只提供个参考        public static bool Serialize<T>(T value,string filename)
            {
                try
                {
                    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bs = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                    System.IO.FileStream stream = new System.IO.FileStream(filename, System.IO.FileMode.Create);
                    bs.Serialize(stream, value);
                    stream.Close();
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            public static T DeSerialize<T>(string filename)
            {
                T obj;
                if (!System.IO.File.Exists(filename))
                    return default(T);
                System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bs = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                System.IO.FileStream stream = new System.IO.FileStream(filename, System.IO.FileMode.Open);
                obj = (T)bs.Deserialize(stream);
                stream.Close();
                return obj;
            }
      

  2.   

    你现在的参数定义OK,但下面的代码需要修改:XmlSerializer serializer = new XmlSerializer(typeof(object));  
    改为
    XmlSerializer serializer = new XmlSerializer(object.GetType());  
      

  3.   

    和string,int一样的。public void Test()
    {
       List<Person> persons = balabala;
       Create(persons);
    }public void Create(List<Person> persons)
    {
       //balabala...
    }
      

  4.   

    给你一个参考例子。在工程中创建一个用来写“扩展方法”的static类,然后写下这类代码:public static string 序列化<T>(this T obj)
    {
        return obj.序列化(typeof(T));
    }public static string 序列化(this object obj, Type type)
    {
        DataContractJsonSerializer serilializer = new DataContractJsonSerializer(type);
        using (var stream = new MemoryStream())
        {
            serilializer.WriteObject(stream, obj);
            return Encoding.UTF8.GetString(stream.ToArray());
        }
    }
    在测试程序中,比如对于对象x,可以使用Console.WriteLine(x.序列化());来打印它。
      

  5.   

    对于List<T>,序列化的时候应该使用数组,使用Linq支持ToArray和ToList方法,对数组才进行底层操作。
      

  6.   

    (object.GetType()); 对象序列化
      

  7.   

    最好是定义成泛型 然后应用 typeof ,因为这比 GetType 效率要高