Serialize a pair of name value pairs without using node with XmlSerializer

I have this class ...

[XmlRoot("config")] public class SourceConfig { public string Description { get; set; } public string HelpLink { get; set; } } 

... which I am serializing in this ...

 <config> <Description /> <HelpLink /> <param name="param1" value="" /> <param name="param2" value="" /> </config> 

... using the XmlSerializer + post process, using the XmlDocument to add <param> elements.

Is there a better way to serialize <param> elements without further processing with an XmlDocument ?

I tried using the XmlArray attribute, but the <param> elements ended up inside another node.

+4
source share
1 answer

Make an XmlElement:

 [XmlRoot("config")] public class SourceConfig { public string Description { get; set; } public string HelpLink { get; set; } [XmlElement("param")] public List<Params> param { get; set; } } 

Full working example:

 [XmlRoot("config")] public class SourceConfig { public SourceConfig() { Description = String.Empty; HelpLink = String.Empty; Parameters = new List<ParamDetails>(); } public string Description { get; set; } public string HelpLink { get; set; } [XmlElement("param")] public List<ParamDetails> Parameters { get; set; } } public class ParamDetails { [XmlAttribute("name")] public string name; [XmlAttribute("value")] public string value; } static class Program { static void Main() { XmlSerializer ser1 = new XmlSerializer(typeof(SourceConfig)); SourceConfig list1 = new SourceConfig(); list1.Description = "Test Desc"; list1.HelpLink = String.Empty; list1.Parameters.Add(new ParamDetails { name = "param1", value = "1" }); list1.Parameters.Add(new ParamDetails { name = "param2", value = "2" }); ser1.Serialize(Console.Out, list1); } } 

Outputs the following:

 <?xml version="1.0" encoding="IBM437"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Description>Test Desc</Description> <HelpLink /> <param name="param1" value="1" /> <param name="param2" value="2" /> </config> 
+8
source

Source: https://habr.com/ru/post/1385367/


All Articles