.Net C# XML XmlSerializer 总结

      //数据类节点

        [Serializable]
        [XmlRoot("SQB_HEAD")]
        //输出节点带命名空间
        //[XmlRoot(ElementName = "SQB_HEAD", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
        public class SQB_HEAD
        {
            public string WORK_NO { get; set; }
            public string GATEPASS { get; set; }
            public string GATEPASS_NO { get; set; }


            //输出头节点SQB_BODYList和子节点SQB_BODY,List<SQB_BODY> 必须指定Type,SQB_BODY[]数组无需指定Type属性
            //[XmlArray("SQB_BODYList"),XmlArrayItem("SQB_BODY", Type = typeof(SQB_BODY))]
            //直接输出子节点SQB_BODY
            [XmlElement(ElementName = "SQB_BODY", Type = typeof(SQB_BODY))]             
            public List<SQB_BODY> ArrSQB_BODY { get; set; }


        }


        public class SQB_BODY{
            public string Column1 {get; set; }
            public string Column2 {get; set; }


            [XmlElement(ElementName = "SQB_BODY_T", Namespace = "http://www.chinaport.gov.cn/tcs/v2")]
            public SQB_BODY_T OSQB_BODY_T {get; set; }
        }


        public class SQB_BODY_T{
            public string Column3 {get; set; }
            public string Column4 {get; set; }
            [XmlArray("SQB_BODY_XList"),XmlArrayItem("SQB_BODY_X")]
            public SQB_BODY_X[] ArrSQB_BODY_X { get; set; }
        }


        public class SQB_BODY_X{
            public string Column5 {get; set; }
            public string Column6 {get; set; }
        }




        //XmlSerializer代码
        Type _type = typeof(SQB_HEAD);
        SQB_HEAD objVal = new SQB_HEAD();
        var OSQB_BODY_X = new SQB_BODY_X();
        var OSQB_BODY_T = new SQB_BODY_T();
        OSQB_BODY_T.ArrSQB_BODY_X = (new List<SQB_BODY_X>{OSQB_BODY_X}).ToArray();
        var OSQB_BODY = new SQB_BODY();
        objVal.ArrSQB_BODY = new List<SQB_BODY>{ }


        #region XML序列化


        XmlSerializerNamespaces xmlnsEmpty = new XmlSerializerNamespaces();
        //xmlnsEmpty.Add("", "");//去除默认命名空间 xmlns:xsd和xmlns:xsi
        //以下两步会直接将命名空间加在XML指定的Root节点上(SQB_HEAD),如需分别加,应分开序列化节点
        xmlnsEmpty.Add("", "http://www.w3.org/2001/XMLSchema-instance");//添加命名空间,子数据无需加前缀
        xmlnsEmpty.Add("tcs", "http://www.chinaport.gov.cn/tcs/v2");//添加命名空间,并将子数据全部添加上tcs:前缀
        XmlSerializer xmlser = new XmlSerializer(_type);
        StringBuilder sb = new StringBuilder();
        using (XmlWriter writer = XmlWriter.Create(sb, new XmlWriterSettings { OmitXmlDeclaration = true }))
        {
            xmlser.Serialize(writer, objVal, xmlnsEmpty);
        }


        #endregion
        //转换为XML String
        string XMLStr = sb.ToString();

猜你喜欢

转载自blog.csdn.net/foreverhot1019/article/details/80838248