How to serialize multiple objects into an existing XmlDocument, without having the namespaces on each component?

后端 未结 2 1496
耶瑟儿~
耶瑟儿~ 2020-12-22 01:16

How to serialize multiple objects into a existing XmlDocument in .Net/C#?

I have a XmlDocument, which already contains data. I have multiple objects. Now I want to s

2条回答
  •  我在风中等你
    2020-12-22 01:33

    This will serialize objects and append them to a XmlDocument. While de-/serializing the code will resolve the namespaces. @Alex: Thanks for the example with XPathNavigator.

    void test2()
    {
        XmlDocument doc = new XmlDocument();
        XmlNode root = doc.AppendChild(doc.CreateElement("root"));
    
        doc.DocumentElement.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
        doc.DocumentElement.SetAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
    
        serializeAppend(root, new object[] { 1, "two", 3.0 });  // serialize object and append it to XmlNode
        var obj = deserialize(root.ChildNodes[0]);    // deserialize XmlNode to object
    }
    T deserialize(XmlNode node)
    {
        XPathNavigator nav = node.CreateNavigator();
        using (var reader = nav.ReadSubtree())
        {
            var serializer = new XmlSerializer(typeof(T));
            return (T)serializer.Deserialize(reader);
        }
    }
    void serializeAppend(XmlNode parentNode, object obj)
    {
        XPathNavigator nav = parentNode.CreateNavigator();
        using (var writer = nav.AppendChild())
        {
            var serializer = new XmlSerializer(obj.GetType());
            writer.WriteWhitespace("");
            serializer.Serialize(writer, obj);
            writer.Close();
        }
    }
    

提交回复
热议问题