0
我試圖序列化對象到XML應該產生這樣的一個XML文檔:XML序列化不能導出列表正確
<?xml version="1.0" encoding="UTF-8"?>
<XMLFile xmlns="http://www.google.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<channels>
<Ch01>
<Name>Test Channel 01</Name>
<Number>1</Number>
</Ch01>
<Ch02>
<Company>Google</Company>
<Founded>2015-10-23T13:04:04.2048888+01:00</Founded>
<Founder>Some Guy</Founder>
</Ch02>
</channels>
</XMLFile>
不幸的是,標籤丟失,當我做了系列化,我已經花了兩個小時試圖找出它,我有一個同事看,他們也難住,下面是一個副本代碼(不是我們的項目真正的東西)它有同樣的問題。
測試代碼:
XMLFile file = new XMLFile();
file.channels.Add(new Ch01() {Name = "Test Channel 01", Number = 1});
file.channels.Add(new Ch02() {Company = "Google", Founded = DateTime.Now, Founder = "Some Guy"});
XMLSerialize.SerializeToXml(Application.StartupPath + "//test.xml", file);
XMLFILE:
[Serializable]
public class XMLFile
{
public XMLFile()
{
}
[XmlElement(Type = typeof(Ch01))]
[XmlElement(Type = typeof(Ch02))]
public List<channel> channels = new List<channel>();
}
信道:
[Serializable]
public class channel
{
public channel()
{
}
}
CH01:
[Serializable]
public class Ch01 : channel
{
public Ch01()
{
}
public string Name;
public int Number;
}
CH02:
[Serializable]
public class Ch02 : channel
{
public Ch02()
{
}
public string Company;
public DateTime Founded;
public string Founder;
}
XMLSerialize來:
public static class XMLSerialize
{
public static void SerializeToXml<T>(string file, T value)
{
var serializer = new XmlSerializer(typeof(T), "http://www.google.com");
using (var writer = XmlWriter.Create(file))
serializer.Serialize(writer, value);
}
public static T DeserializeFromXML<T>(string file)
{
XmlSerializer deserializer = new XmlSerializer(typeof(T), "http://www.google.com");
TextReader textReader = new StreamReader(file);
T result;
result = (T)deserializer.Deserialize(textReader);
textReader.Close();
return result;
}
這裏是輸出我得到:
<?xml version="1.0" encoding="UTF-8"?>
<XMLFile xmlns="http://www.google.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Ch01>
<Name>Test Channel 01</Name>
<Number>1</Number>
</Ch01>
<Ch02>
<Company>Google</Company>
<Founded>2015-10-23T13:04:04.2048888+01:00</Founded>
<Founder>Some Guy</Founder>
</Ch02>
</XMLFile>
這樣做是爲了將產生一個巨大的XML文件中的項目,所以手動創建通過XmlDocument不是一個好的選擇。
任何想法?
當你說「的標籤丟失,」你指的是頂部的XML聲明(「<?xml version = ...」)?您向我們展示了您的預期產出 - 這可能有助於查看您的實際產出。 –
對不起忘了。我已經加入了真正的輸出時,標籤丟失 –
不應該'[XmlArray(「通道」)]'爲你做這個? – Icepickle