2011-05-08 57 views
1

我需要將xml文件反序列化爲List或Array,然後將此List或Array放大1,然後再次序列化文件,將新對象添加到此XML文件。如何反序列化XML文件,然後序列化再次添加新項目到這個文件?

我寫了類似的東西,但它不工作:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Xml; 
using System.IO; 
using System.Xml.Serialization; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    public void deserialize() 
    { 
     string path = Server.MapPath(Request.ApplicationPath + "/test.xml"); 
     using (FileStream fs = new FileStream(path, FileMode.Open)) 
     { 
      XmlSerializer ser = new XmlSerializer(typeof(List<Person>)); 
      List<Person> persons = (List<Person>)ser.Deserialize(fs); 
      fs.Close(); 
      //List<Person> persons1 = ((List<Person>)os.Length + 1); 
     } 
    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     string path = Server.MapPath(Request.ApplicationPath + "/test.xml"); 
     if (File.Exists(path)) 
     { 
      deserialize(); 
     } 
     else 
     { 
      List<Person> o = new List<Person>(TextBox1.Text, TextBox2.Text, int.Parse(TextBox3.Text)); 
      using (FileStream fs = new FileStream(path, FileMode.Create)) 
      { 
       XmlSerializer ser = new XmlSerializer(typeof(List<Person>)); 
       ser.Serialize(fs, o); 
      } 
     } 
    } 
} 

感謝您的幫助:)

+0

爲什麼不連載新的對象,然後操作XML插入新對象的XML中的附加元素? – Richard 2011-05-08 09:17:51

+0

我沒有發明這個解決方案,但如果你的解決方案是簡單的方法來做到這一點比我可以這樣做你的方式:)我認爲 – harry180 2011-05-08 09:28:10

+0

請注意,雖然我已經能夠回答這個問題,今後請給予更多的細節比「不起作用」。閱讀http://tinyurl.com/so-hints提示如何寫好問題。 – 2011-05-08 09:36:18

回答

1

你反序列化的代碼實際上是一個無操作 - 你不返回任何東西。將其更改爲回報反序列化的列表,像這樣:

private List<Person> Deserialize(string path) 
{ 
    using (FileStream fs = new FileStream(path, FileMode.Open)) 
    { 
     XmlSerializer ser = new XmlSerializer(typeof(List<Person>)); 
     return (List<Person>) ser.Deserialize(fs);//There is an error in XML document (2, 2). this error i got here 
    } 
} 

然後單擊事件中,這樣的事情:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    string path = Server.MapPath(Request.ApplicationPath + "/test.xml"); 
    List<Person> people = File.Exists(path) ? Deserialize(path) 
              : new List<Person>(); 
    people.Add(new Person(TextBox1.Text, TextBox2.Text, 
          int.Parse(TextBox3.Text)); 
    using (FileStream fs = File.OpenWrite(path)) 
    { 
     XmlSerializer ser = new XmlSerializer(typeof(List<Person>)); 
     ser.Serialize(fs, o); 
    } 
} 
+0

我在錯誤處添加了代碼當我得到錯誤 – harry180 2011-05-08 09:49:56

+0

@ harry180:我真的不明白你的意思,我很害怕。 – 2011-05-08 09:50:39