2014-05-25 28 views
0

我是Xml的新手,編寫了創建Xml的代碼並將其讀回。 但我想在Xml結構中進行一些修改。將多個對象寫入/讀入Xml C#

我不想要的是ArrayOfMovie標籤,它是作爲根標籤頁來的。 但是,當我寫入多個對象到Xml它顯示一個ArrayOfMovie標籤。由於我必須保持班級的結構,因此上部標籤爲電影,然後是其細節,然後是其他電影。如果您告訴代碼修改xml,請告訴程序讀取新構建的xml。

下面是場景的代碼:

// Movies class which contains the list of Movie objects 
public class Movies 
    { 
    public List<Movie> movieList = new List<Movie>(); 

    } 

    //Movie class 
    public class Movie 
    { 

     public string Title 
     { get; set; } 


     public int Rating 
     { get; set; } 


     public DateTime ReleaseDate 
     { get; set; } 

    } 

    private void CreateXml_Click(object sender, EventArgs e) 
    { 
     string filePath = path + textBox_XmlFileName.Text+".xml"; 

     Movie firstMov = new Movie(); 
     firstMov.Title = "Shrek"; 
     firstMov.Rating = 2; 
     firstMov.ReleaseDate = DateTime.Now; 

     Movie secondMov = new Movie(); 
     secondMov.Title = "Spider Man"; 
     secondMov.Rating = 4; 
     secondMov.ReleaseDate = DateTime.Now; 

     Movies moviesObj = new Movies(); 
     moviesObj.movieList.Add(firstMov); 
     moviesObj.movieList.Add(secondMov); 
     List<Movie> movList = new List<Movie>() { firstMov,secondMov}; 

     XmlHandler.SerializeToXml(moviesObj.movieList, filePath); 

    } 

// The static class and funcion that creates the xml file 
     public static void SerializeToXml(List<Movie> movies ,string filePath) 
     { 
      XmlSerializer xls= new XmlSerializer(typeof(List<Movie>)); 

     TextWriter tw = new StreamWriter(filePath); 
     xls.Serialize(tw, movies); 
     tw.Close(); 
     } 

//創建以下輸出

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfMovie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Movie> 
    <Title>Shrek</Title> 
    <Rating>2</Rating> 
    <ReleaseDate>2014-05-25T22:55:17.2811063+05:00</ReleaseDate> 
    </Movie> 
    <Movie> 
    <Title>Spider Man</Title> 
    <Rating>4</Rating> 
    <ReleaseDate>2014-05-25T22:55:17.2811063+05:00</ReleaseDate> 
    </Movie> 
</ArrayOfMovie> 

//讀取文件導入對象的代碼

public static List<Movie> DeserializeFromXml(string filePath) 
    { 
     XmlSerializer deserializer = new XmlSerializer(typeof(List<Movie>)); 
     TextReader tr = new StreamReader(@filePath); 
     List<Movie> movie; 
     movie = (List<Movie>)deserializer.Deserialize(tr); 
     tr.Close(); 

     return movie; 
    } 
+0

XML文檔具有**單個**根元素。嘗試使用多個根元素創建XML文檔會使這種不合規XML文檔的消耗成爲一種負擔。你爲什麼想這麼做? – elgonzo

+0

我想刪除ArrayOfMovies標籤。其餘的東西創建是好的。並且還想要將其重新啓動。 –

+0

那麼,爲什麼你要刪除* ArrayOfMovies *標籤呢?它只是使得反序列化比必要的更加複雜。 – elgonzo

回答

1

如果你想命名你的根,你可以使用XmlRootAttribute

XmlSerializer deserializer = new XmlSerializer(typeof(List<Movie>), 
new XmlRootAttribute("YourRoot")); 
+0

但那不是通用的! 我想刪除ArrayOfMovie標籤,其餘的結構很好,我也想讀回它。 –