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 }
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 }
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 }
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();
DEMO地址:链接: http://pan.baidu.com/s/1kTkKwb9 密码: obks
现在写下来,与大家共勉!
漫漫人生,唯有激流勇进,不畏艰险,奋力拼搏,方能中流击水,抵达光明的彼岸
标签:
XML数据读取
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App