zoukankan      html  css  js  c++  java
  • XML序列化点滴

           在C#中用反射将XML转化成实体类时,发现了一个大小写的问题。


    XML文本
      <?xml version="1.0" encoding="gb2312"?>
    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://ww
    w.w3.org/2001/XMLSchema">
      <common>
        <project_id>1</project_id>
        <gateway_id>1</gateway_id>
        <type>md5</type>
      </common>

      <gateway_id>1</gateway_id>

      <id_validate operation="md5">
     <md5>061e85ee43152b671a5f49039a6042cbb
    </md5>

      </id_validate>
    </root>

              

    实体类
           [XmlRoot("root")]
            public class MD5
            {
                public MD5(string p, string p_2, string p_3)
                {
                    this.Common = new common(p, p_2, "md5");
                    this.idvalidate = new id_validate(p_3);
                }
                public MD5()
                {
                    this.Common = new common(string.Empty, string.Empty, "md5");
                    this.idvalidate = new id_validate(string.Empty);


                }

                [XmlElement(ElementName = "common")]
                public common Common { get; set; }
                [XmlElement(ElementName = "id_validate")]
                public id_validate idvalidate { get; set; }
            [XmlElement(ElementName = "gateway_Id")]
                public string gateway_Id { get; set; }


                public class id_validate
                {
                    public id_validate()
                    {
                        this.operation = "md5";
                        this.StrMD5 = "";
                    }


                    public id_validate(string p_3)
                    {
                        this.operation = "md5";
                        this.StrMD5 = p_3;
                    }
                    [XmlAttribute(AttributeName = "md5")]
                    public string operation
                    {
                        get;
                        set;
                    }
                    [XmlElement(ElementName = "md5")]
                    public string StrMD5 { get; set; }

                }


            }



    这个时候,想要进行序列化和反序列化操作,其中对普通数据类型的序列化反序列化,比如gateway_Id节点,那么默认将实体类中的属性名作为对应的XML文本中节点名称。这样乍看一下好像没有什么问题,但是实际上,我发现,这样经常会出现反射到实体类中属性值有时候为空,在几经测试之后发现,原来是Xml文本反射到实体类中,根据实体类的属性名进行反射时,是大小写敏感的(我用的是XmlSerializer x = new XmlSerializer(md5.GetType());
                x.Serialize(Console.Out, md5);来反射实体类)

    如果没有注意大小写,就没有办法正确地为实体类中的属性或公有字段赋值。



    作者:kissazi2
    出处:http://www.cnblogs.com/kissazi2/
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    VS Studio中复制窗体产生obj\Debug\SXP227\newform2.resources”在“Resources”参数中指定了多次。“Resources”参数不支持重复项 错误解决方案
    标签 frameset, frame ,noframes,iframe
    Winform GridView的允许自动生成列属性 AutoGenerateColumns
    目前自己的.Net的水平状态评估、方向
    C# 读取Excel中的时间
    asp.net中Button控件的单击回传机制
    javascript实现两个asp.net服务器控件ListBox值的互传
    关键字partial
    解决jQuery插件tipswindown与hintbox冲突
    C#数据结构三:单链表Singly Linked List
  • 原文地址:https://www.cnblogs.com/kissazi2/p/2977142.html
Copyright © 2011-2022 走看看