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);來反射實體類)

如果沒有注意大小寫,就沒有辦法正確地爲實體類中的屬性或公有字段賦值。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章