Assuming your CatalogProduct object looks something like this:
    public class CatalogProduct {
        public string Name;
        public string Version;
    }
I think Linq to Xml will be the simplest and fastest way for you
var cps1 = new[] { new CatalogProduct { Name = "Name 1", Version = "Version 1" },
                 new CatalogProduct { Name = "Name 2", Version = "Version 2" } };
var xml = new XElement("CatalogProducts", 
            from c in cps1
            select new XElement("CatalogProduct", 
                new XAttribute("Name", c.Name),
                new XAttribute("Version", c.Version)));
    // Use the following to deserialize you objects
var cps2 = xml.Elements("CatalogProduct").Select(x =>
    new CatalogProduct { 
        Name = (string)x.Attribute("Name"),
        Version = (string)x.Attribute("Version") }).ToArray();
Please note that .NET offers true object graph serialization which I have not shown