none
C#中如何将一个类用XML序列化后,作为一个节点添加到已存在的xml文件中 RRS feed

  • 问题

  • 比如有个Cat类,实例化后,要以xml的格式序列化保存到本地的CatList.xml中,不能覆盖xml文件中原有的数据,只是作为一个新的节点加入。

    如果加入成功,要以反序列化的方式读取,怎么操作。

    2014年1月24日 13:42

答案

  • 现实遇到的问题是,序列化和反序列化操作的是流,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中反序列化即可


    2014年1月26日 16:26

全部回复

  • 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序列化的。没有这个前提的话,除非你自己实现序列化和反序列化类。

    2014年1月25日 1:24
  • 现实遇到的问题是,序列化和反序列化操作的是流,xml文件操作的是xml节点,我没找到哪个类或哪个方法是可以把这两种类型相互转化的。
    2014年1月26日 12:16
  • 现实遇到的问题是,序列化和反序列化操作的是流,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中反序列化即可


    2014年1月26日 16:26