Quantcast
Channel: Windows PowerShell forum
Viewing all articles
Browse latest Browse all 21975

custom .NET class with serialization method throw exception

$
0
0

I created a custom class using Add-Type and it's defined by C# code.  Because of the limitations of the export and import CliXml cmdlets I created a serialize and deserialize method on the class.  This works great from my C# project in VS however when I run it from Powershell it throws the following exception:

There was an error generating the XML document.
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces)
   at ConfigMgr.Serialize()

The type initializer for 'Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterConfigMgr' threw an exception.
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterConfigMgr..ctor()
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializerContract.get_Writer()
   at System.Xml.Serialization.TempAssembly.InvokeWriter(XmlMapping mapping, XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)

Any ideas what this means?  

Here's the class definition, including the serialization method:

    [Serializable]
    public class ConfigMgr
    {
        public ConfigMgr()
        {
            Locations = new List<Location>();
        }
        [XmlArray]
        public List<Location> Locations{get; set;}
        [XmlIgnore]
        public LocCfg CurrentConfig
        {
            get
            {
                foreach(Location pcl in Locations)
                {
                    foreach(LocCfg pc in pcl.Configs)
                    {
                        if(pc.CurrentLoc)
                        {
                            return pc;
                        }
                    }
                }
                return null;
            }
            set
            {
                foreach(Location pcl in Locations)
                {
                    foreach(LocCfg pc in pcl.Configs)
                    {
                        if(pc.CurrentLoc)
                        {
                            using(System.IO.StreamReader myFile = new System.IO.StreamReader(pcl.PhysicalPath + "\\settings.config"))
                            {
                                pc.Settings = myFile.ReadToEnd();
                            }
                            using(System.IO.StreamReader myFile = new System.IO.StreamReader(pcl.PhysicalPath + "\\keystore.config"))
                            {
                                pc.KeyStore = myFile.ReadToEnd();
                            }
                        }
                        if(pc.Equal(value))
                        {
                            pc.CurrentLoc = true;
                        }
                        else
                        {
                            pc.CurrentLoc = false;
                        }
                    }
                }
            }
        }

            
        public string Serialize()
        {
            try{
                StringBuilder strRequest = new StringBuilder();
                XmlWriterSettings xs = new XmlWriterSettings();
                xs.OmitXmlDeclaration = true;
                using (XmlWriter xwRequest = XmlWriter.Create(strRequest, xs))
                {
                    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                    XmlSerializer serRequest = new XmlSerializer(typeof(ConfigMgr));
                    ns.Add("", "");
                    serRequest.Serialize(xwRequest, this, ns);
                }
                return strRequest.ToString();
            }
            catch(Exception ex)
            {
                string err = "";
                err = ex.Message + "\n" + ex.StackTrace;
                Exception exIn = ex.InnerException;
                while (exIn != null)
                {
                    err += "\n\n" + ex.InnerException.Message + "\n" + ex.InnerException.StackTrace;
                    exIn = exIn.InnerException;
                }
                return err;
            }
        }


        public static ConfigMgr Deserialize(string filepath)
        {
            using (XmlReader reader = XmlReader.Create(filepath))
            {
                XmlSerializer serRequest = new XmlSerializer(typeof(ConfigMgr));
                if (serRequest.CanDeserialize(reader))
                {
                    try
                    {
                        ConfigMgr ad = (ConfigMgr)serRequest.Deserialize(reader);
                        XmlDocument x = new XmlDocument();
                        return ad;
                    }
                    catch
                    {
                        return new ConfigMgr();
                    }
                }
                else
                {
                    return new ConfigMgr();
                }

            }            
        }
    }


Viewing all articles
Browse latest Browse all 21975

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>