2011-08-16 55 views
1

我試圖序列類,定義如下:類序列化爲XML沒有一個類名

 [DataContract] 
    public class Human 
    { 

     public Human() { } 


     public Human(int id, string Name, bool isEducated) 
     { 
      this.id = id; 
      this.Name = Name; 
      this.isEducated = isEducated; 
     } 

     [DataMember] 
     public int id { get; set; } 

     [DataMember] 
     public string Name { get; set; } 

     [DataMember] 
     public bool isEducated { get; set; } 
    } 

那麼它是正在連載:

  Human h = new Human(id, Name, isEducated); 
     XmlRootAttribute root = new XmlRootAttribute(); 
     root.ElementName = "Repository"; 
     XmlSerializer xs = new XmlSerializer(typeof(Human), root); 

     FileStream fs = new FileStream(fname, FileMode.Open); 
     xs.Serialize(fs, h); 

這是結果:

<Repository xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <id>1</id> 
    <Name>Vill</Name> 
    <isEducated>false</isEducated> 
</Repository> 

不是我所期待。類名稱只是省略。這裏有什麼問題?

+0

嘗試沒有「根」的東西。 – 2011-08-16 07:16:47

回答

3

你被明確命名根元素「資源庫」,這就是爲什麼它顯示了這種方式。您忽略了這一聲明:)

我想你想要的是這個庫元素後,有人類。爲此,您需要在Repository之下創建另一個根元素,然後將您的對象序列化爲該元素。您應該注意到,XmlSerializer通常用於將對象寫入xml文件,而不是真正創建整個xml文件。我有一些可能對你的工作如下的例子:

System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(FilePath, null); 
writer.WriteStartDocument(); 
writer.Formatting = Formatting.Indented; 
writer.WriteStartElement("Repository"); 

Human h = new Human(id, Name, isEducated); 
XmlRootAttribute root = new XmlRootAttribute(); 
root.ElementName = "Human"; 
XmlSerializer xs = new XmlSerializer(typeof(Human), root); 
xs.Serialize(writer, h); 

writer.WriteEndElement(); 
writer.Close(); 

類似的東西...我真的很困:/

+0

好了,你能不能請,澄清我怎麼明確speciy該子根元素? – Arnthor

+0

當然,我會編輯我的答案。支持。 –

+0

@Nordvind我剛剛編輯了我寫的更簡單。 –