• XML序列化,添加命名空间,添加声明头,添加节点前缀


    xml序列化方法

    /// <summary>
    /// 将一个对象序列化为XML字符串
    /// </summary>
    /// <param name="o">要序列化的对象</param>
    /// <param name="encoding">编码方式</param>
    /// <returns>序列化产生的XML字符串</returns>
    public static string XmlSerialize(object o, Encoding encoding)
    {
        if (o == null)
            throw new ArgumentNullException("o");
        if (encoding == null)
            throw new ArgumentNullException("encoding");
    
        string xml = "";
        try
        {
            using (MemoryStream stream = new MemoryStream())
            {
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Encoding = encoding;
    
                //OmitXmlDeclaration表示不生成声明头,默认是false,OmitXmlDeclaration为true,会去掉<?xml version="1.0" encoding="UTF-8"?>
                //settings.OmitXmlDeclaration = true;
    
                XmlWriter writer = XmlWriter.Create(stream, settings);
    
                //强制指定命名空间,覆盖默认的命名空间,可以添加多个,如果要在xml节点上添加指定的前缀,可以在跟节点的类上面添加[XmlRoot(Namespace = "http://www.w3.org/2001/XMLSchema-instance", IsNullable = false)],Namespace指定哪个值,xml节点添加的前缀就是哪个命名空间(这里会添加ceb)
                XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
                namespaces.Add("ceb", "http://www.chinaport.gov.cn/ceb");
                namespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
    
                XmlSerializer serializer = new XmlSerializer(o.GetType());
                serializer.Serialize(writer, o, namespaces);
                writer.Close();
    
                stream.Position = 0;
                using (StreamReader reader = new StreamReader(stream, encoding))
                {
                    xml = reader.ReadToEnd();
                }
            }
        }
        catch (Exception ex)
        {
            
        }
        return xml;
    }

    对象属性:

    [XmlRoot(Namespace = "http://www.chinaport.gov.cn/ceb")]
    public class CEB311Message
    {
        [XmlAttribute("guid")]
        public string Guid { get; set; }
    
        [XmlAttribute("version")]
        public string Version { get; set; }
    
        public Order Order { get; set; }
    
        public BaseTransfer BaseTransfer { get; set; }
    }
    
    public class Order
    {
        public OrderHead OrderHead { get; set; }
    
        [XmlElement("OrderList")]
        public List<OrderList> OrderList { get; set; }
    }
    
    public class BaseTransfer
    {
        public string copCode { get; set; }
        
        public string copName { get; set; }
        
        public string dxpMode { get; set; }
        
        public string dxpId { get; set; }
        
        public string note { get; set; }
    }
    
    public class OrderHead
    {
        //......
    }
    
    public class OrderList
    {
        //......
    }

    序列化以后的xml报文:

    <?xml version="1.0" encoding="utf-8"?>
    <ceb:CEB311Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" guid="F9BF2981-B2E2-4621-A15D-74E25AE6F8FD" version="1.0" xmlns:ceb="http://www.chinaport.gov.cn/ceb">
        <ceb:Order>
            <ceb:OrderHead>
                <ceb:guid>AF55F05A-1176-474A-A560-631EFAC83061</ceb:guid>
                <ceb:appType>1</ceb:appType>
                <ceb:appTime>20160708143049</ceb:appTime>
                <ceb:appStatus>2</ceb:appStatus>
                <ceb:orderType>I</ceb:orderType>
                <ceb:orderNo>XSC2016070200002</ceb:orderNo>
                <ceb:ebpCode>Alibaba888888</ceb:ebpCode>
                <ceb:ebpName>杭州阿里巴巴淘宝电子商务有限公司</ceb:ebpName>
                <ceb:ebcCode>IE123456789</ceb:ebcCode>
                <ceb:ebcName>厦门xxx软件科技有限公司</ceb:ebcName>
                <ceb:goodsValue>902.50</ceb:goodsValue>
                <ceb:freight>0</ceb:freight>
                <ceb:discount>0</ceb:discount>
                <ceb:taxTotal>90.25</ceb:taxTotal>
                <ceb:acturalPaid>902.50</ceb:acturalPaid>
                <ceb:currency>142</ceb:currency>
                <ceb:buyerRegNo>青帝</ceb:buyerRegNo>
                <ceb:buyerName>叶青</ceb:buyerName>
                <ceb:buyerIdType>1</ceb:buyerIdType>
                <ceb:buyerIdNumber>350583198909067413</ceb:buyerIdNumber>
                <ceb:payCode />
                <ceb:payName />
                <ceb:payTransactionId>ZFB20160628170422</ceb:payTransactionId>
                <ceb:batchNumbers />
                <ceb:consignee>叶青</ceb:consignee>
                <ceb:consigneeTelephone>18201010101</ceb:consigneeTelephone>
                <ceb:consigneeAddress>福建省xxx</ceb:consigneeAddress>
                <ceb:consigneeDistrict>350203</ceb:consigneeDistrict>
                <ceb:note />
            </ceb:OrderHead>
            <ceb:OrderList>
                <ceb:gnum>1</ceb:gnum>
                <ceb:itemNo>TestZS20160712242</ceb:itemNo>
                <ceb:itemName>测试海关总署商品</ceb:itemName>
                <ceb:itemDescribe />
                <ceb:barCode />
                <ceb:unit>122</ceb:unit>
                <ceb:qty>5</ceb:qty>
                <ceb:price>180.50</ceb:price>
                <ceb:totalPrice>902.50</ceb:totalPrice>
                <ceb:currency>142</ceb:currency>
                <ceb:country>304</ceb:country>
                <ceb:note />
            </ceb:OrderList>
        </ceb:Order>
        <ceb:BaseTransfer>
            <ceb:copCode>440316277F</ceb:copCode>
            <ceb:copName>xxx</ceb:copName>
            <ceb:dxpMode>DXP</ceb:dxpMode>
            <ceb:dxpId>DXPENTTEST510001</ceb:dxpId>
            <ceb:note />
        </ceb:BaseTransfer>
    </ceb:CEB311Message>
    CEB311Message类头上的[XmlRoot(Namespace = "http://www.chinaport.gov.cn/ceb")],Namespaces指定哪一个值,就可以添加对应命名空间的前缀
  • 相关阅读:
    TXSQL:云计算时代数据库核弹头——云+未来峰会开发者专场回顾
    游戏场景下的DDoS风险分析及防护
    一站式机器学习平台TI-ONE是什么?——云+未来峰会开发者专场回顾
    带有Apache Spark的Lambda架构
    攻克数据库核心技术壁垒,实现百万级QPS的高吞吐
    想学大数据?大数据处理的开源框架推荐
    可怕!数据库竟然打破安迪-比尔定律
    什么?云数据库也能C位出道?
    协同过滤的R语言实现及改进
    Android代码规范----按钮单击事件的四种写法
  • 原文地址:https://www.cnblogs.com/zfylzl/p/5653432.html
Copyright © 2020-2023  润新知