C#中xml的顺序化和反序列

原创
小哥 3年前 (2022-11-16) 阅读数 9 #大杂烩

反序列化方法:

        ///   
        /// 反序列化  
        ///   
        /// 类型  
        /// XML字符串  
        ///   
        public static object Deserialize(Type type, string xml)
        {
            using (StringReader sr = new StringReader(xml))
            {
                XmlSerializer xmldes = new XmlSerializer(type);
                return xmldes.Deserialize(sr);
            }
        }

序列化方法:

        ///   
        /// 序列化  
        ///   
        /// 类型  
        /// 对象  
        ///   
        public static string Serializer(Type type, object obj)
        {
            var settings = new XmlWriterSettings
            {
                Indent = true,
                IndentChars = " ",
                NewLineChars = "

", Encoding = Encoding.UTF8, OmitXmlDeclaration = true // 不生成声明头 }; MemoryStream Stream = new MemoryStream(); XmlSerializer xml = new XmlSerializer(type);

            using (XmlWriter xmlWriter = XmlWriter.Create(Stream, settings))
            {

                XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
                namespaces.Add(string.Empty, string.Empty);
                //序列化对象  
                xml.Serialize(xmlWriter, obj, namespaces);
                xmlWriter.Close();
            }
            Stream.Position = 0;
            StreamReader sr = new StreamReader(Stream);
            string str = sr.ReadToEnd();

            sr.Dispose();
            Stream.Dispose();

            return str;
        }

使用例子:

        public string HelloWorld()
        {
            string xml = @"
    
        1
        1
        1
    
    
    
            1
            1
            1
            1
            1
        
    
 ";
            try
            {
                //把xml反序列化成对象,主要你的对象里的属性名要和xml标签一样,不然会解析失败;
                //把Model.M01000.Input.MSG替换成你的对象即可;
                Model.M01000.Input.MSG msg = new Model.M01000.Input.MSG();
                msg = XmlSerializeUtil.Deserialize(typeof(Model.M01000.Input.MSG), xml) as Model.M01000.Input.MSG;
            }
            catch (Exception ex)
            {
                Pub.WriteError("==解析XML失败==" + xml + Environment.NewLine + ex.ToString());
            }

            //这里就是把对象给序列化成xml
            //也是把Model.M01000.Ouput.Normal.MSG替换成你的对象即可;
            Model.M01000.Ouput.Normal.MSG rnmsg = new Model.M01000.Ouput.Normal.MSG();
            string strmsg = XmlSerializeUtil.Serializer(typeof(Model.M01000.Ouput.Normal.MSG), rnmsg);

            return "Hello World";
        }

亲测可用,注意对象属性名要和xml标签一样,注意对象属性名要和xml标签一样,注意对象属性名要和xml标签一样!!!

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除