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中的节点名称一样则不需要用特性标识

 /// <summary>
/// IP段
/// </summary>
public class IP
{
/// <summary>
/// [XmlElement(ElementName = "start")]用于标识IP节点中的start节点
/// </summary>
[XmlElement(ElementName = "start")]
public String StartIP { get; set; } /// <summary>
/// [XmlElement(ElementName = "start")]用于标识IP节点中的end节点
/// </summary>
[XmlElement(ElementName = "end")]
public String EndIP { get; set; }
}

IP类,对应XML中的IP节点

3、创建一个CityIPList类

     /// <summary>
/// 城市IP集合
/// </summary>
public class CtiyIPList
{
[XmlElement(ElementName = "flag")]
public String CityFlag { get; set; } [XmlElement(ElementName = "ip")]
public List<IP> IPList { get; set; }
}

CityIPList类

4、创建一个Root类

     /// <summary>
/// 整个XMLIP数据
/// </summary>
public class Root
{
/// <summary>
/// [XmlElement(ElementName = "city")]用于标识XML city节点
/// </summary>
[XmlElement(ElementName = "city")]
public List<CtiyIPList> All { get; set; }
}

Root类,类名与XML根节点名称一样

5、读取数据

 //xml路径
string filePath = @"E:\WorkDocument\ConsoleApplication1\ConsoleApplication1\IPPackage.xml";
//读取文件
FileStream stream = new FileStream(filePath, FileMode.Open);
//序列化读取XML数据
XmlSerializer serializer = new XmlSerializer(typeof(Root));
Root list = (Root)serializer.Deserialize(stream);
stream.Close();

读取XML方法体

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

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

XML序列化器读取XML数据的更多相关文章

  1. 使用XMl序列化器生成xml文件

    生成XML文件 创建几个虚拟的短信对象,存在list中 备份数据通常都是备份至sd卡 使用StringBuffer拼接字符串 把整个xml文件所有节点append到sb对象里 sb.append(&q ...

  2. 使用XML序列化器生成XML文件和利用pull解析XML文件

    首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...

  3. Android 使用xml序列化器生成xml文件

    在<Android 生成xml文件>一文中使用流的形式写入xml格式文件,但是存在一定的问题,那就是在短信内容中不能出现<>之类的括号,本文使用xml序列化器来解决 xml序列 ...

  4. .NET 二进制序列化器,SOAP序列化器,XML序列化器

    这里就不说JSON序列化了,只介绍三种:二进制序列化器,SOAP序列化器,XML序列化器 直接上代码: /// <summary> /// 二进制序列化器. /// 最节省流量,压缩程度最 ...

  5. IOSerialize,xml和json,soap序列化器,二进制序列化器,XML序列化器,文件 检查、新增、复制、移动、删除

    1 文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/读取配置文件3 三种序列化器4 xml和json1.文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/ ...

  6. xml生成方式二(Xml序列化器XmlSerializer)

    一.andoirdAPI提供了xml生成和解析的API: XmlSerializer xs = Xml.newSerializer();和XmlPullParser xmlPullParser = X ...

  7. [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类

    [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...

  8. 使用java自带的xml解析器解析xml

    使用java自带的xml解析器解析xml,其实我不推荐,可以用Dom解析,或其他的方式,因为Java自带的解析器使用不但麻烦,且还有bug出现. 它要求,针对不同的xml(结构不同),必须写对应的ha ...

  9. 使用Pull解析器生成XML文件和读取xml文件

    有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...

随机推荐

  1. 从$emit 到 父子组件通信 再到 eventBus

    故事还是得从$emit说起,某一天翻文档的时候看到$emit的说明 触发当前实例上的事件?就是自身组件上的事件呗,在父子组件通信中,父组件通过props传递给子组件数据(高阶组件可以用provide和 ...

  2. 前端之Vue.js库的使用

    vue.js简介 Vue.js读音 /vjuː/, 类似于 view Vue.js是前端三大新框架:Angular.js.React.js.Vue.js之一,Vue.js目前的使用和关注程度在三大框架 ...

  3. Lintcode算法

    题目: 给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数. 样例 给出 [1, 20, 23, 4, 8],返回组合最大的整数应为8423201. 思路:直接交换两个数,然后判断交换之后的 ...

  4. git 上传到码云

    创建分支 在码云里创建好分支 命令行进入项目所在的目录 显示码云上的分支 git pull 选择将要编辑的分支(index-fenzhi) git checkout index-fenzhi 查看分支 ...

  5. SpringBoot向outlook发送邮件

    首先要登陆outlook邮箱,点击设置滑到最下面选择完整设置 进入后选择邮件->同步电子邮件 打开pop如上设置 下面是我的application.propertis设置 请填上自己的邮箱名与密 ...

  6. JS高级. 04 增删改查面向对象版歌曲管理、递归、

    增 数组.push() 删 数组.splice(开始删除索引,删除几个) 在当前对象中调用当前对象的方法中和属性,必须用this调用 nodeType判断节点类型 节点.nodeType ==  1: ...

  7. ExtJS动态切换主题

    ExtJS动态切换主题         在Sencha Cmd构建的Ext程序中怎么去动态切换主题,目前看好像只能单一切换,但是在官网文档找到了答案 Resource Management在上一节通过 ...

  8. apache使用.htaccess文件中RewriteRule重定向后,URL中的加号无法解析

    今天在使用.htaccess做伪静态的时候,发生一件怪事,URL里存在C++时会有问题,在处理C++这个词的时候,无论如何,$_GET都得不到++,只能得到C空格. 一开始我以为是没用urlencod ...

  9. linux进程篇 (一) 进程的基本概念

    进程是系统资源分配的最小单位. 1.创建和执行 父进程通过 fork 系统调用创建子进程, 子进程被创建后,处于创建状态. linux为子进程配置数据结构,如果内存空间足够,子进程就在内核中就绪,成为 ...

  10. narcissus

    public class narcissus { public static void main(String args[]) { long u=0,t=0,h=0,y=0,k=0; for(long ...