C# 引用System.Xml.Serialization 操作XML格式数据

C# 引用System.Xml.Serialization 操作XML格式数据。现在好多接口对接都是XML格式的报文,所以拼接XML不美观,且不容易维护。
可以通过访问https://www.toolscat.com/convert/xml-csharp 快速转换XML实体

实体类

     /// <summary>
    /// 公用域 请求报文
    /// </summary>
    [XmlRoot("Transaction")]
    public class RequestMessage
    {
        /// <summary>
        /// 公用域请求头
        /// </summary>
        [XmlElement("Transaction_Header")]
        public RequestMessage_Header RequestMessage_Header { get; set; }

        /// <summary>
        /// 公用域 请求体
        /// </summary>
        [XmlElement("Transaction_Body")]
        public RequestMessage_Body RequestMessage_Body { get; set; }

    }

    /// <summary>
    /// 公用域 请求报文头
    /// </summary>
    public class RequestMessage_Header
    {
        /// <summary>
        /// 服务名 必填 签到P1OPME001 
        /// </summary>
        [XmlElement("SYS_TX_CODE")]
        public string ServiceCode { get; set; }

        /// <summary>
        /// 应用报文长度 定长10位,不充 10位前面充0
        /// </summary>
        [XmlElement("SYS_MSG_LEN")]
        public string MessageLength { get; set; }

        /// <summary>
        /// 发起方交易时间
        /// </summary>
        [XmlElement("SYS_REQ_TIME")]
        public string RequstTime { get; set; }

        /// <summary>
        /// 服务版本号 当前为:01
        /// </summary>
        [XmlElement("SYS_TX_VRSN")]
        public string ServiceVersion { get; set; } = "<![CDATA[01]]>";

        /// <summary>
        /// 交易日期
        /// </summary>
        [XmlElement("TXN_DT")]
        public string TransactionDate { get; set; } = $"<![CDATA[{DateTime.Now.ToString("yyMMdd")}]]>";

        /// <summary>
        /// 交易时间
        /// </summary>
        [XmlElement("TXN_TM")]
        public string TransactionTime { get; set; } = $"<![CDATA[{DateTime.Now.ToString("hhmmsss")}]]>";

        /// <summary>
        /// 交易人员编号
        /// </summary>
        [XmlElement("TXN_STFF_ID")]
        public string TranPersonCode { get; set; }

        /// <summary>
        /// 多实体标识
        /// </summary>
        [XmlElement("MULTI_TENANCY_ID")]
        public string MulitLanguage { get; set; } = "<![CDATA[CN000]]>";

        /// <summary>
        /// 语言标识
        /// </summary>
        [XmlElement("LNG_ID")]
        public string LanguageIdenti { get; set; } = "<![CDATA[zh-cn]]>";

        /// <summary>
        /// 多页查询每页笔数 分页查询时使用
        /// </summary>
        [XmlElement("REC_IN_PAGE")]
        public string PageTotal { get; set; }

        /// <summary>
        /// 多页查询跳转页码 分页查询时使用
        /// </summary>
        [XmlElement("PAGE_JUMP")]
        public string PageJumpSize { get; set; }

        /// <summary>
        /// 状态跟踪号
        /// </summary>
        [XmlElement("STS_TRACE_ID")]
        public string StatusTraceCode { get; set; }

        /// <summary>
        /// 电子银行合约编号
        /// </summary>
        [XmlElement("CHNL_CUST_NO")]
        public string BankChnlCustNo { get; set; }

        /// <summary>
        /// 发起方流水号
        /// </summary>
        [XmlElement("IttParty_Jrnl_No")]
        public string InitiateSerialNumber { get; set; }

        /// <summary>
        /// 交易发起方IP地址
        /// </summary>
        [XmlElement("Txn_Itt_IP_Adr")]
        public string CounterPartyAdr { get; set; }

    }

    /// <summary>
    /// 请求报文体
    /// </summary>
    public class RequestMessage_Body
    {
        [XmlElement("request")]
        public Body_Request Body_Request { get; set; }
    }

    /// <summary>
    /// 请求报文体
    /// </summary>
    public class Body_Request
    {
        /// <summary>
        /// 开始日期 数据格式:yyyyMMdd
        /// </summary>
        [XmlElement("StDt")]
        public string BeginDate { get; set; } = $"<![CDATA[{DateTime.Now:yyMMdd}]]>";

        /// <summary>
        /// 开始时间 数据格式:HHmmss
        /// </summary>
        [XmlElement("StTm")]
        public string BeginTime { get; set; } = $"<![CDATA[{DateTime.Now:hhmmsss}]]>";
    }

XML序列化和反序列化

	  /// <summary>
        ///反序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="xml"></param>
        /// <returns></returns>
        public static T DeserializeObject<T>(string xml, string nameSpace = "") where T : class
        {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.OmitXmlDeclaration = true;//这一句表示忽略xml声明
            settings.Indent = true;
            settings.Encoding = Encoding.UTF8;

            using (StringReader sr = new StringReader(xml))
            {
                using (XmlTextReader xr = new XmlTextReader(sr))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(T));
                    return (T)serializer.Deserialize(xr);
                }
            }

        }

        /// <summary>
        ///XML序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="serialObject"></param>
        /// <returns></returns>
        public static string XmlSerializer<T>(T serialObject) where T : class
        {
            var emptyNamepsaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
            var serializer = new XmlSerializer(serialObject.GetType());
            var settings = new XmlWriterSettings();
            settings.OmitXmlDeclaration = false;
            settings.Encoding = new UTF8Encoding(false);
            MemoryStream stream = new MemoryStream();
            using (var writer = XmlWriter.Create(stream, settings))
            {
                serializer.Serialize(writer, serialObject, emptyNamepsaces);
            }
            return settings.Encoding.GetString(stream.ToArray());
        }

建行需要对内容格式转换帮助类

		/// <summary>
        /// 格式化数据 因为银行的数据必须要包含
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string SetFormatValue(this string value)
        {
            var str = string.Format("<![CDATA[{0}]]>", value);
            return str;
        }

XML序列化

  			RequestMessage_Header theader = new RequestMessage_Header();
            RequestMessage_Body tbody = new RequestMessage_Body();

            Body_Request body_Request = new Body_Request();
            body_Request.BeginDate = DateTime.Now.ToString("yyyMMdd").SetFormatValue();
            body_Request.BeginTime = DateTime.Now.ToString("hhmmsss").SetFormatValue();
            tbody.Body_Request = body_Request;
            RequestMessage t = new RequestMessage();
            t.RequestMessage_Body = tbody;
            t.RequestMessage_Header = theader;
            var xmls = Xml.XmlUtil.XmlSerializer(t).Replace("&lt;", "<").Replace("&gt;", ">");

XML反序列化

 			var xmlstr = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Transaction><Transaction_Header><SYS_TX_CODE><![CDATA[P1CMSET35]]></SYS_TX_CODE><SYS_MSG_LEN><![CDATA[0000500000]]></SYS_MSG_LEN><SYS_REQ_TIME><![CDATA[20210903083608695]]></SYS_REQ_TIME><SYS_TX_VRSN><![CDATA[01]]></SYS_TX_VRSN><TXN_DT><![CDATA[20210903]]></TXN_DT><TXN_TM><![CDATA[083608]]></TXN_TM><TXN_STFF_ID><![CDATA[]]></TXN_STFF_ID><MULTI_TENANCY_ID><![CDATA[CN000]]></MULTI_TENANCY_ID><LNG_ID><![CDATA[zh-cn]]></LNG_ID><REC_IN_PAGE></REC_IN_PAGE><PAGE_JUMP></PAGE_JUMP><STS_TRACE_ID></STS_TRACE_ID><CHNL_CUST_NO><![CDATA[]]></CHNL_CUST_NO><IttParty_Jrnl_No></IttParty_Jrnl_No><Txn_Itt_IP_Adr><![CDATA[60.208.111.207]]></Txn_Itt_IP_Adr></Transaction_Header><Transaction_Body><request><ASPD_ECD><![CDATA[]]></ASPD_ECD><SChl_No><![CDATA[]]></SChl_No><FwCtl_Node_ID><![CDATA[]]></FwCtl_Node_ID><IttParty_Bsn_Dt><![CDATA[20210903]]></IttParty_Bsn_Dt><Grp_ID><![CDATA[]]></Grp_ID><Cst_ID><![CDATA[]]></Cst_ID><Prim_AR_No><![CDATA[]]></Prim_AR_No><Root_Node_PdAr_ID><![CDATA[]]></Root_Node_PdAr_ID><PdAr_ID><![CDATA[]]></PdAr_ID><SvM24Hr_Ind><![CDATA[]]></SvM24Hr_Ind><Tmzon_ECD><![CDATA[]]></Tmzon_ECD><Rqs_Upload_File_Nm><![CDATA[]]></Rqs_Upload_File_Nm><Cmpt_Ent_ID><![CDATA[]]></Cmpt_Ent_ID><WF_BIZ_ID><![CDATA[]]></WF_BIZ_ID><WF_MNPLT_TP><![CDATA[]]></WF_MNPLT_TP><WF_FCN_ID><![CDATA[]]></WF_FCN_ID><CCstTr_ID><![CDATA[CMN0007800092]]></CCstTr_ID><CCstTrNdID><![CDATA[]]></CCstTrNdID><Rule_Chk_Ind_1><![CDATA[]]></Rule_Chk_Ind_1><Cmpt_Rltv_Jrnl_No><![CDATA[]]></Cmpt_Rltv_Jrnl_No><CstPty_TxnSrlNo><![CDATA[]]></CstPty_TxnSrlNo><Pyr_DpBkNm><![CDATA[]]></Pyr_DpBkNm><Pyr_DepBnk_No><![CDATA[]]></Pyr_DepBnk_No><Pyr_BnkCD><![CDATA[]]></Pyr_BnkCD><Pyr_BkCgyCd><![CDATA[01]]></Pyr_BkCgyCd><Pyr_Cst_AccNo><![CDATA[37001646244050147436]]></Pyr_Cst_AccNo><Pyr_AccNm><![CDATA[公司三一]]></Pyr_AccNm><Pyr_Acc_CgyCd><![CDATA[]]></Pyr_Acc_CgyCd><Pyr_Adr><![CDATA[]]></Pyr_Adr><RcvPrt_CCstTr_ID><![CDATA[]]></RcvPrt_CCstTr_ID><RcvPrt_CCstTrNdID><![CDATA[]]></RcvPrt_CCstTrNdID><RcvPrt_DpBkNm><![CDATA[中国建设银行股份有限公司昌乐支行]]></RcvPrt_DpBkNm><RcvPrt_DepBnk_No><![CDATA[]]></RcvPrt_DepBnk_No><RcvPrt_BnkCD><![CDATA[]]></RcvPrt_BnkCD><RcvPrt_BkCgyCd><![CDATA[01]]></RcvPrt_BkCgyCd><RcvPrt_Cst_AccNo><![CDATA[]]></RcvPrt_Cst_AccNo><RcvPtAc_Nm><![CDATA[公司六二]]></RcvPtAc_Nm><RcvPtAc_CgyCd><![CDATA[02]]></RcvPtAc_CgyCd><RcvPrt_Adr><![CDATA[山东坊市]]></RcvPrt_Adr><Rqs_Amt><![CDATA[1.00]]></Rqs_Amt><Urgnt_TpCd><![CDATA[01]]></Urgnt_TpCd><Use_Nm><![CDATA[平台付款建行银企连付款测试]]></Use_Nm><CshMgt_Use_ID><![CDATA[]]></CshMgt_Use_ID><Rmrk><![CDATA[平台付款建行银企直连付款测试]]></Rmrk><RvPy_Bdgt_Use_ID></RvPy_Bdgt_Use_ID><RvPy_Bdgt_Use_Nm></RvPy_Bdgt_Use_Nm><Trgr_Amt></Trgr_Amt><Csz_Txn_Nm></Csz_Txn_Nm><Py_Cnd_TpCd><![CDATA[00]]></Py_Cnd_TpCd><STBal_Val></STBal_Val><Scl_Fctr></Scl_Fctr><Roud_NbrOfBit></Roud_NbrOfBit><RvPy_ExMd_Cd><![CDATA[0]]></RvPy_ExMd_Cd><Rsrvtn_Exec_Dt></Rsrvtn_Exec_Dt><Rsrvtn_Exec_Tm></Rsrvtn_Exec_Tm><Frq_MtdCd></Frq_MtdCd><FxFrq_Exec_Dt_Dsc></FxFrq_Exec_Dt_Dsc><Prsz_Inf_1></Prsz_Inf_1><Prsz_Inf_2></Prsz_Inf_2><Prsz_Inf_3></Prsz_Inf_3><Prsz_Inf_4></Prsz_Inf_4><Prsz_Inf_5></Prsz_Inf_5><Prsz_Inf_6></Prsz_Inf_6><Prsz_Inf_7></Prsz_Inf_7><Prsz_Inf_8></Prsz_Inf_8><Prsz_Inf_9></Prsz_Inf_9><Prsz_Inf_10></Prsz_Inf_10><Prsz_Inf_Nm_1></Prsz_Inf_Nm_1><Prsz_Inf_Nm_2></Prsz_Inf_Nm_2><Prsz_Inf_Nm_3></Prsz_Inf_Nm_3><Prsz_Inf_Nm_4></Prsz_Inf_Nm_4><Prsz_Inf_Nm_5></Prsz_Inf_Nm_5><Prsz_Inf_Nm_6></Prsz_Inf_Nm_6><Prsz_Inf_Nm_7></Prsz_Inf_Nm_7><Prsz_Inf_Nm_8></Prsz_Inf_Nm_8><Prsz_Inf_Nm_9></Prsz_Inf_Nm_9><Prsz_Inf_Nm_10></Prsz_Inf_Nm_10><Doc_Inf></Doc_Inf><Cst_Dlv_Dt><![CDATA[20210903]]></Cst_Dlv_Dt><Cst_Dlv_Tm><![CDATA[083608695]]></Cst_Dlv_Tm><Cst_Csz_Dt></Cst_Csz_Dt><Cst_Csz_Tm></Cst_Csz_Tm><Rsrv_Fld_1></Rsrv_Fld_1><Rsrv_Fld_2></Rsrv_Fld_2><Rsrv_Fld_3></Rsrv_Fld_3><Rsrv_Fld_4></Rsrv_Fld_4><Rsrv_Fld_5></Rsrv_Fld_5><Rsrv_Fld_6></Rsrv_Fld_6><Rsrv_Fld_7></Rsrv_Fld_7><Rsrv_Fld_8></Rsrv_Fld_8><Rsrv_Fld_9></Rsrv_Fld_9><Rsrv_Fld_10></Rsrv_Fld_10><CCBS_Fee_Sbj_Cd></CCBS_Fee_Sbj_Cd><Cst_RecAmt></Cst_RecAmt><Ahn_Py_Agrm_No></Ahn_Py_Agrm_No><Pyr_AccNm_Verf_Cd></Pyr_AccNm_Verf_Cd><RcvPrt_AccNm_Verf_Cd></RcvPrt_AccNm_Verf_Cd><Cst_MblPh_No></Cst_MblPh_No><SMS_Cntnt></SMS_Cntnt><Email_Adr></Email_Adr><Mail_CntDsc></Mail_CntDsc><CstPty_Py_Jrnl_No><![CDATA[2021090300000040]]></CstPty_Py_Jrnl_No></request></Transaction_Body></Transaction>";
            var tsdd = Xml.XmlUtil.DeserializeObject<ResponseMessage>(xmlstr);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值