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:\WorkDocument\ConsoleApplication1\ConsoleApplication1\IPPackage.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
现在写下来,与大家共勉!
时间: 2024-10-10 15:18:33