• XML序列化器读取XML数据


    PS:标题我还真的不知道该怎么取比较好,大家将就下吧^_^

    场景:上周接到一个任务,要求我把ASP写的会员充值功能,用ASP.NET复制一遍,没有给我需求文档,就是让我根据代码去分析业务逻辑,然后看到一个IP识别功能,就是判断该会员卡是否可以在该IP段内使用,看着一大片的用if then 写的IP地址判断,我就蛋疼了。。。。

          我就一直琢磨该怎么优化代码,开始用逗号去分割,然后把IP地址写在web.config中,但是太多了,然后请教同事,同事说可以用XML配置(web.config虽然也是XML,但是不在web.config中),然后用序列化读取。

         废话了那么多,下面让我们开始吧!

        1、根据需求创建一个XML文件,命名IPPackage

      

    <?xml version="1.0" encoding="utf-8" ?>
    <Root>
      <city>
        <!--城市标志-->
        <flag>SX</flag>
        <!--IP段-->
        <ip>
          <start>11.1.0.0</start>
          <end>11.1.25.255</end>
        </ip>
        <ip>
          <start>11.2.0.0</start>
          <end>11.3.25.255</end>
        </ip>
      </city>
      <city>
        <!--城市标志-->
        <flag>NX</flag>
        <!--IP段-->
        <ip>
          <start>11.1.0.0</start>
          <end>11.1.25.255</end>
        </ip>
        <ip>
          <start>11.2.0.0</start>
          <end>11.3.25.255</end>
        </ip>
      </city>
    </Root>

    2、创建一个IP类,然后用特性标识,如果你的类名称和字段名称与XML中的节点名称一样则不需要用特性标识

     1 /// <summary>
     2     /// IP段
     3     /// </summary>
     4     public class IP
     5     {
     6         /// <summary>
     7         /// [XmlElement(ElementName = "start")]用于标识IP节点中的start节点
     8         /// </summary>
     9         [XmlElement(ElementName = "start")]
    10         public String StartIP { get; set; }
    11 
    12         /// <summary>
    13         /// [XmlElement(ElementName = "start")]用于标识IP节点中的end节点
    14         /// </summary>
    15         [XmlElement(ElementName = "end")]
    16         public String EndIP { get; set; }
    17     }
    IP类,对应XML中的IP节点

    3、创建一个CityIPList类

     1     /// <summary>
     2     /// 城市IP集合
     3     /// </summary>
     4     public class CtiyIPList
     5     {
     6         [XmlElement(ElementName = "flag")]
     7         public String CityFlag { get; set; }
     8 
     9         [XmlElement(ElementName = "ip")]
    10         public List<IP> IPList { get; set; }
    11     }
    CityIPList类

    4、创建一个Root类

     1     /// <summary>
     2     /// 整个XMLIP数据
     3     /// </summary>
     4     public class Root
     5     {
     6         /// <summary>
     7         /// [XmlElement(ElementName = "city")]用于标识XML city节点
     8         /// </summary>
     9         [XmlElement(ElementName = "city")]
    10         public List<CtiyIPList> All { get; set; } 
    11     }
    Root类,类名与XML根节点名称一样

    5、读取数据

    1 //xml路径
    2             string filePath = @"E:WorkDocumentConsoleApplication1ConsoleApplication1IPPackage.xml";
    3             //读取文件
    4             FileStream stream = new FileStream(filePath, FileMode.Open);
    5             //序列化读取XML数据
    6             XmlSerializer serializer = new XmlSerializer(typeof(Root));
    7             Root list = (Root)serializer.Deserialize(stream);
    8             stream.Close();
    读取XML方法体

    DEMO地址:链接: http://pan.baidu.com/s/1kTkKwb9 密码: obks

    现在写下来,与大家共勉!

  • 相关阅读:
    WCF中关于可靠会话的BUG!!
    控制并发访问的三道屏障: WCF限流(Throttling)体系探秘[下篇]
    《天使之恋》,一部重口味的纯美爱情电影
    一个关于解决序列化问题的编程技巧
    [转]Design Rules for ModelViewPresenter
    你知道Unity IoC Container是如何创建对象的吗?
    只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题
    使命必达: 深入剖析WCF的可靠会话[原理揭秘篇](上)
    回调与并发: 通过实例剖析WCF基于ConcurrencyMode.Reentrant模式下的并发控制机制
    如何编写没有Try/Catch的程序
  • 原文地址:https://www.cnblogs.com/ganqiyin/p/3748422.html
Copyright © 2020-2023  润新知