积极答复者
C#中如何将一个类用XML序列化后,作为一个节点添加到已存在的xml文件中

问题
答案
-
现实遇到的问题是,序列化和反序列化操作的是流,xml文件操作的是xml节点,我没找到哪个类或哪个方法是可以把这两种类型相互转化的。
可以用MemoryStream,如下所示,序列化时,先把Cat序列化到MemoryStream中,然后用StreamReader把MemoryStream中的内容读出来。
XmlSerializer serializer = new XmlSerializer(typeof(Cat)); using (MemoryStream ms = new MemoryStream()) { serializer.Serialize(ms, new Cat()); ms.Seek(0, SeekOrigin.Begin); using (StreamReader sr = new StreamReader(ms)) { XmlDocument doc = new XmlDocument(); doc.LoadXml(sr.ReadToEnd()); //catNode是CatList.xml中的一个节点 catNode.InnerXml = doc.DocumentElement.InnerXml; } }
反序列化的过程就相反,先用StreamWriter把CatList.xml中的Cat节点的内容写到MemoryStream中,再从MemoryStream中反序列化即可
- 已标记为答案 Terry Guo - MSFTModerator 2014年2月5日 1:55
全部回复
-
1.用.net中的XmlDocument类加载CatList.xml文件;
2.然后再用XmlSerializer序列化Cat类;
3.把序列化得到的xml字符串加入到步骤1中的XmlDocument中;
至于你说的要把CatList.xml的数据反序列化,你可以这样:
1.把CatList.xml加载到XmlDocument;
2.遍历XmlDocument节点,然后再用.net中的反序列化类,进行反序列化即可。
3.反序列化的前提是,CatList.xml中的数据都是由XmlSerializer序列化的。没有这个前提的话,除非你自己实现序列化和反序列化类。
-
现实遇到的问题是,序列化和反序列化操作的是流,xml文件操作的是xml节点,我没找到哪个类或哪个方法是可以把这两种类型相互转化的。
可以用MemoryStream,如下所示,序列化时,先把Cat序列化到MemoryStream中,然后用StreamReader把MemoryStream中的内容读出来。
XmlSerializer serializer = new XmlSerializer(typeof(Cat)); using (MemoryStream ms = new MemoryStream()) { serializer.Serialize(ms, new Cat()); ms.Seek(0, SeekOrigin.Begin); using (StreamReader sr = new StreamReader(ms)) { XmlDocument doc = new XmlDocument(); doc.LoadXml(sr.ReadToEnd()); //catNode是CatList.xml中的一个节点 catNode.InnerXml = doc.DocumentElement.InnerXml; } }
反序列化的过程就相反,先用StreamWriter把CatList.xml中的Cat节点的内容写到MemoryStream中,再从MemoryStream中反序列化即可
- 已标记为答案 Terry Guo - MSFTModerator 2014年2月5日 1:55