通过昨天的文章我们已经了解了开发一个开心网的外挂所需要的最基本的东本,接下来的工作可以说基本上就上围绕这个基础来进行的,我写这一系列文章主要的目地不仅仅是为了让大家了解怎么开发开心网外挂,最主要的目过还是通过一个实例程序的编程,让初学者了解C#。

因为好多初学都看了很多基础性的东西,了解到了C#有好多特性, 但这些特性到底是干吗用的,或用了有什么好处了解的不够清楚,所以我在这一系列中,会陆续介绍

  1. XML序列化
  2. 泛型
  3. 设计模式的运用
  4. 多线程

等等这些都将会在我的程序中被运用到,今天先写XML序列化与反序列化,其实我的程序主要用到的是XML的反序列化,我们先了解一下XML序列化与反序列化是怎么回事

XML序列化与反序列化

MSDN中是这么说的:

序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。反之,反序列化根据流重新构造对象。

在C#中XML 序列化中的中心类是 XmlSerializer 类,该类中最重要的方法是 SerializeDeserialize 方法。简单的示例我就不从MSDN中抄了, 大家了解了就行, 不了解去翻MSDN。下面我会到我们的程序, 为什么我们要用到序列化。

为什么我们需要XML序列化

我们先对开心网的各种操作进行分析,我把我会发现,开心网好多操作请求服务器后,服务器会返会一个XML格式的字符串。比如说,我们的花园信息,我们会发现,服务器端返回的是这么一个XML

开心网花园信息的XML
  1<conf>
  2  <account>
  3    <rank>23</rank>
  4    <ranktip>技能:23级再务农2天可升级</ranktip>
  5    <setting>
  6      <water>谢谢帮忙,你真是个大好人</water>
  7      <vermin>我感谢你八辈子祖宗,哈哈</vermin>
  8      <steal>敢偷我的,你等着!</steal>
  9      <farm>欢迎来我家花园务农!</farm>
 10      <dmsg></dmsg>
 11      <sleeptime>2</sleeptime>
 12    </setting>
 13    <cash>191万</cash>
 14    <logo50>http://img.kaixin001.com.cn/i/50_1_0.gif</logo50>
 15    <name>王楠</name>
 16    <cashtip>我的现金余额1913932</cashtip>
 17    <bkswf>http://img.kaixin001.com.cn/i2/house/garden/bk2_1.swf</bkswf>
 18    <ad></ad>
 19    <ad2></ad2>
 20    <bfirst>0</bfirst>
 21    <tcharms>939</tcharms>
 22    <careurl></careurl>
 23    <flowerwomanurl></flowerwomanurl>
 24    <flowerwomanmsg>王楠还不给我花婆婆发工资?#_#¥%</flowerwomanmsg>
 25    <beeurl></beeurl>
 26    <rainbowurl></rainbowurl>
 27    <ranchswf>http://img.kaixin001.com.cn//i2/house/ranch/animals/elephant5.swf</ranchswf>
 28  </account>
 29  <garden>
 30    <item>
 31      <water>5</water>
 32      <farmnum>1</farmnum>
 33      <vermin>0</vermin>
 34      <cropsid>0</cropsid>
 35      <fuid>-1</fuid>
 36      <status>1</status>
 37      <grass>0</grass>
 38      <shared>0</shared>
 39    </item>
 40    <item>
 41      <water>5</water>
 42      <farmnum>2</farmnum>
 43      <vermin>0</vermin>
 44      <cropsid>0</cropsid>
 45      <fuid>-1</fuid>
 46      <status>1</status>
 47      <grass>0</grass>
 48      <shared>0</shared>
 49    </item>
 50    <item>
 51      <water>5</water>
 52      <farmnum>3</farmnum>
 53      <vermin>0</vermin>
 54      <cropsid>0</cropsid>
 55      <fuid>-1</fuid>
 56      <status>1</status>
 57      <grass>0</grass>
 58      <shared>0</shared>
 59    </item>
 60    <item>
 61      <water>5</water>
 62      <farmnum>4</farmnum>
 63      <vermin>0</vermin>
 64      <cropsid>681856826</cropsid>
 65      <fuid>-1</fuid>
 66      <status>1</status>
 67      <grass>0</grass>
 68      <shared>0</shared>
 69      <pic>http://img.kaixin001.com.cn//i2/house/garden/crop2/renshen12.swf</pic>
 70      <fruitpic>http://img.kaixin001.com.cn//i2/house/garden/crop/renshen.swf</fruitpic>
 71      <picwidth>130</picwidth>
 72      <picheight>120</picheight>
 73      <cropsstatus>1</cropsstatus>
 74      <grow>73</grow>
 75      <totalgrow>120</totalgrow>
 76      <fruitnum>4</fruitnum>
 77      <seedid>21</seedid>
 78      <name>人参</name>
 79      <crops>生长阶段:61%&lt;br&gt;&lt;font size='12' color='#666666'&gt;再过1天2小时更大一些&lt;/font&gt;&lt;br&gt;距离收获:7天18小时&lt;br&gt;</crops>
 80      <farm>水:&lt;br&gt;第30季&lt;br&gt;</farm>
 81    </item>
 82    <item>
 83      <water>5</water>
 84      <farmnum>5</farmnum>
 85      <vermin>0</vermin>
 86      <cropsid>681858119</cropsid>
 87      <fuid>-1</fuid>
 88      <status>1</status>
 89      <grass>0</grass>
 90      <shared>0</shared>
 91      <pic>http://img.kaixin001.com.cn//i2/house/garden/crop2/renshen12.swf</pic>
 92      <fruitpic>http://img.kaixin001.com.cn//i2/house/garden/crop/renshen.swf</fruitpic>
 93      <picwidth>130</picwidth>
 94      <picheight>120</picheight>
 95      <cropsstatus>1</cropsstatus>
 96      <grow>73</grow>
 97      <totalgrow>120</totalgrow>
 98      <fruitnum>4</fruitnum>
 99      <seedid>21</seedid>
100      <name>人参</name>
101      <crops>生长阶段:61%&lt;br&gt;&lt;font size='12' color='#666666'&gt;再过1天2小时更大一些&lt;/font&gt;&lt;br&gt;距离收获:7天18小时&lt;br&gt;</crops>
102      <farm>水:&lt;br&gt;第34季&lt;br&gt;</farm>
103    </item>
104    <item>
105      <water>5</water>
106      <farmnum>6</farmnum>
107      <vermin>0</vermin>
108      <cropsid>0</cropsid>
109      <fuid>0</fuid>
110      <status>1</status>
111      <grass>0</grass>
112      <shared>1</shared>
113    </item>
114    <item>
115      <water>5</water>
116      <farmnum>7</farmnum>
117      <vermin>0</vermin>
118      <cropsid>0</cropsid>
119      <fuid>0</fuid>
120      <status>1</status>
121      <grass>0</grass>
122      <shared>1</shared>
123    </item>
124    <item>
125      <water>5</water>
126      <farmnum>8</farmnum>
127      <vermin>0</vermin>
128      <cropsid>0</cropsid>
129      <fuid>-1</fuid>
130      <status>1</status>
131      <grass>0</grass>
132      <shared>0</shared>
133    </item>
134    <item>
135      <water>5</water>
136      <farmnum>9</farmnum>
137      <vermin>0</vermin>
138      <cropsid>1573453690</cropsid>
139      <fuid>-1</fuid>
140      <status>1</status>
141      <grass>0</grass>
142      <shared>0</shared>
143      <pic>http://img.kaixin001.com.cn//i2/house/garden/crop1/lingzhi_2.swf</pic>
144      <fruitpic>http://img.kaixin001.com.cn//i2/house/garden/crop/lingzhi.swf</fruitpic>
145      <picwidth>130</picwidth>
146      <picheight>120</picheight>
147      <cropsstatus>1</cropsstatus>
148      <grow>2</grow>
149      <totalgrow>15</totalgrow>
150      <fruitnum>4</fruitnum>
151      <seedid>24</seedid>
152      <name>灵芝</name>
153      <crops>生长阶段:16%&lt;br&gt;&lt;font size='12' color='#666666'&gt;再过2小时43分再高一些&lt;/font&gt;&lt;br&gt;距离收获:2天2小时43分&lt;br&gt;</crops>
154      <farm>水:&lt;br&gt;第20季&lt;br&gt;</farm>
155    </item>
156    <item>
157      <water>5</water>
158      <farmnum>10</farmnum>
159      <vermin>0</vermin>
160      <cropsid>0</cropsid>
161      <fuid>0</fuid>
162      <status>1</status>
163      <grass>0</grass>
164      <shared>1</shared>
165    </item>
166    <item>
167      <water>5</water>
168      <farmnum>11</farmnum>
169      <vermin>0</vermin>
170      <cropsid>1354706925</cropsid>
171      <fuid>-1</fuid>
172      <status>1</status>
173      <grass>0</grass>
174      <shared>0</shared>
175      <pic>http://img.kaixin001.com.cn//i2/house/garden/crop/meigui_g_12.swf</pic>
176      <fruitpic>http://img.kaixin001.com.cn//i2/house/garden/crop/meigui_g.swf</fruitpic>
177      <picwidth>130</picwidth>
178      <picheight>120</picheight>
179      <cropsstatus>2</cropsstatus>
180      <grow>20</grow>
181      <totalgrow>20</totalgrow>
182      <fruitnum>4</fruitnum>
183      <seedid>29</seedid>
184      <name>绿玫瑰</name>
185      <crops>产量:4&lt;br&gt;剩余:4&lt;br&gt;&lt;font size='12' color='#666666'&gt;再过4天23小时44分枯死&lt;/font&gt;&lt;br&gt;</crops>
186      <farm>水:&lt;br&gt;第19季&lt;br&gt;</farm>
187    </item>
188    <item>
189      <water>5</water>
190      <farmnum>12</farmnum>
191      <vermin>0</vermin>
192      <cropsid>0</cropsid>
193      <fuid>0</fuid>
194      <status>1</status>
195      <grass>0</grass>
196      <shared>1</shared>
197    </item>
198    <item>
199      <water>5</water>
200      <farmnum>13</farmnum>
201      <vermin>0</vermin>
202      <cropsid>1354709177</cropsid>
203      <fuid>-1</fuid>
204      <status>1</status>
205      <grass>0</grass>
206      <shared>0</shared>
207      <pic>http://img.kaixin001.com.cn//i2/house/garden/crop/meigui_y_12.swf</pic>
208      <fruitpic>http://img.kaixin001.com.cn//i2/house/garden/crop/meigui_y.swf</fruitpic>
209      <picwidth>130</picwidth>
210      <picheight>120</picheight>
211      <cropsstatus>2</cropsstatus>
212      <grow>20</grow>
213      <totalgrow>20</totalgrow>
214      <fruitnum>6</fruitnum>
215      <seedid>35</seedid>
216      <name>黄玫瑰</name>
217      <crops>产量:6&lt;br&gt;剩余:6&lt;br&gt;&lt;font size='12' color='#666666'&gt;再过3天23小时44分枯死&lt;/font&gt;&lt;br&gt;</crops>
218      <farm>水:&lt;br&gt;第8季&lt;br&gt;</farm>
219    </item>
220    <item>
221      <water>5</water>
222      <farmnum>14</farmnum>
223      <vermin>0</vermin>
224      <cropsid>1533854914</cropsid>
225      <fuid>-1</fuid>
226      <status>1</status>
227      <grass>0</grass>
228      <shared>0</shared>
229      <pic>http://img.kaixin001.com.cn//i2/house/garden/crop1/lingzhi_5.swf</pic>
230      <fruitpic>http://img.kaixin001.com.cn//i2/house/garden/crop/lingzhi.swf</fruitpic>
231      <picwidth>130</picwidth>
232      <picheight>120</picheight>
233      <cropsstatus>1</cropsstatus>
234      <grow>5</grow>
235      <totalgrow>15</totalgrow>
236      <fruitnum>4</fruitnum>
237      <seedid>24</seedid>
238      <name>灵芝</name>
239      <crops>生长阶段:40%&lt;br&gt;&lt;font size='12' color='#666666'&gt;再过4小时11分长高一些&lt;/font&gt;&lt;br&gt;距离收获:1天12小时11分&lt;br&gt;</crops>
240      <farm>水:&lt;br&gt;第8季&lt;br&gt;</farm>
241    </item>
242    <item>
243      <water>5</water>
244      <farmnum>15</farmnum>
245      <vermin>0</vermin>
246      <cropsid>0</cropsid>
247      <fuid>0</fuid>
248      <status>0</status>
249      <grass>0</grass>
250      <shared>1</shared>
251    </item>
252  </garden>
253  <charmstips></charmstips>
254  <weatherurl>http://img.kaixin001.com.cn/swf/house/garden/weather0.swf</weatherurl>
255  <weather>0</weather>
256  <sky>http://img.kaixin001.com.cn/swf/house/garden/sky.swf</sky>
257  <ctime>1248082224</ctime>
258  <ploughurl>http://img.kaixin001.com.cn/swf/house/garden/ploughaward-1.swf</ploughurl>
259  <antiurl>http://img.kaixin001.com.cn/swf/house/smartq-1.swf</antiurl>
260  <shopurl>http://img.kaixin001.com.cn/swf/house/garden/shop-6.swf</shopurl>
261  <granaryurl>http://img.kaixin001.com.cn/swf/house/garden/granary-9.swf</granaryurl>
262  <settingurl>http://img.kaixin001.com.cn/swf/house/garden/setting-3.swf</settingurl>
263  <advanced>
264    <item>23</item>
265    <item>24</item>
266    <item>22</item>
267    <item>21</item>
268    <item>86</item>
269    <item>87</item>
270    <item>84</item>
271    <item>25</item>
272    <item>82</item>
273    <item>81</item>
274  </advanced>
275  <shahua>
276    <item>90</item>
277    <item>91</item>
278    <item>92</item>
279    <item>93</item>
280    <item>94</item>
281  </shahua>
282  <ret>succ</ret>
283</conf>

这里包含了开心花园里的所有信息,怎么样把这些信息读入呢, 好多人的想法都是把这个XML读到XMLDocument里,然后一个一个节点去查找所要的信息,其实用把这个XML反序化了,直接就可以得到一切我们所想要的,何乐而不为呢,我们根据这个XML设计我们的类,反序列化也不是每个节点都有要类中有相对的字段属性,选一些我们需要的就可以, 下面是我设计的类

Code
  1[XmlRoot(ElementName = "conf")]
  2    public class GardenInfo
  3    {
  4        public Account account;
  5        [XmlArray(ElementName="garden")]
  6        [XmlArrayItem(ElementName="item")]
  7        public Garden[] garden;
  8
  9    }
 10
 11    public class Account
 12    {
 13        public int Uid { get; set; }
 14        public int rank;
 15        //public string ranktip;
 16        private string _ranktip;
 17        public string ranktip {
 18            get
 19            {
 20                return _ranktip.Replace("\n"," ");
 21            }
 22            set
 23            {
 24                _ranktip = value;
 25            }
 26        }
 27        public string cash;
 28        public string name;
 29        public string cashtip;
 30
 31    }
 32
 33    public class Garden
 34    {
 35        private string Pattern = @"<[^>]*>";
 36        Regex r;
 37        public Garden()
 38        {
 39            r = new Regex(Pattern);
 40            _farm = " ";
 41            _crops = "";
 42        }
 43        public ActionState acs = ActionState.WAIT;
 44        public int water;
 45        public int farmnum;
 46        public int vermin;
 47        public double cropsid;
 48        public int fuid;
 49        public int status;
 50        public int grass;
 51        public int shared;
 52        public int cropsstatus;
 53        public int grow;
 54        public int totalgrow;
 55        public int fruitnum;
 56        public int seedid;
 57        public string name;
 58        //public string crops;
 59
 60        public string FarmArea 
 61        {
 62            get
 63            {
 64                if (this.shared == 0)
 65                {
 66                    return string.Format("自留地 {0}", this.farmnum);
 67                }
 68                else
 69                {
 70                    return string.Format("爱心地 {0}", this.farmnum);
 71                }
 72            }
 73        }
 74        private string _crops;
 75        public string crops {
 76            get
 77            {
 78                if(_crops!=null)
 79                    _crops = this.r.Replace(_crops, " ");
 80                return _crops;
 81            }
 82            set
 83            {
 84                _crops = value;
 85            }
 86        }
 87        //public string farm;
 88        private string _farm;
 89        public string farm {
 90            get
 91            {
 92                _farm = this.r.Replace(_farm, " ");
 93                return _farm;
 94            }
 95            set
 96            {
 97                _farm = value;
 98            }
 99        }
100    }

可以看到,我们的GardenInfo类,只有一个Account类型的包含花园所属帐户信息的字段,和一个包含花园中每一块田地信息的的Garden[] 数组字段。XML好多节点里的信息我们现在都用不到,所以不必要体现出来,如果以后的需要我们在对映的类里添加相关字段就可以了。

下面我们就写把这个类通过反序列化的方式来实例化的方法:

Code
 1 public GardenInfo GetGardenInfo(int uid)
 2         {
 3             string url = string.Format("http://www.kaixin001.com/!house/!garden//getconf.php?verify={0}&fuid={1}",this.g_verify,uid);
 4 
 5             //return this.Deserialize<GardenInfo>(url);
 6             //GardenInfo curGardenInfo = this.Deserialize<GardenInfo>(url);
 7             //请求服务器,并获得返回的XML字符串
 8             string str=this.myrequest.RequestByGet(url);
 9             
10             //把string类型的xml文件字符写入一个内存流以用于反序列化
11             byte[] bytes = Encoding.GetEncoding("UTF-8").GetBytes(str);
12             Stream s = new MemoryStream();
13             s.Write(bytes, 0, bytes.Length);
14             s.Position = 0;//这一行,相当重要,一开始,我反序列化老是莫明的失败,原因就在于缺这一句
15             XmlSerializer xmls = new XmlSerializer(typeof(GardenInfo));
16                         GardenInfo curGardenInfo = (GardenInfo)xmls.Deserialize(s);
17             return curGardenInfo;
18             
19         }

怎么样简单吧, 用你的VS试试吧。明天我们继续

转载于:https://www.cnblogs.com/9527/archive/2009/08/20/1551050.html

开心网外挂开发之 XML序列化于反序列化相关推荐

  1. XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置

    这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对 ...

  2. XML 序列化与反序列化

    XML序列化与反序列化 1.将一个类转化为XML文件 /// <summary>/// 对象序列化成XML文件/// </summary>/// <param name= ...

  3. IOS开发之JSON序列化从客户端发送到服务器端

    IOS开发之JSON序列化从客户端发送到服务端的准备工作 共有6种情况 需要序列化 请查看源代码. 服务器端接受我们采用的是java的Tomcat服务器.配合 struts 2 controller框 ...

  4. Xml序列化、反序列化帮助类

    之前从网络上找了一个Xml处理帮助类,并整理了一下,这个帮助类针对Object类型进行序列化和反序列化,而不需要提前定义Xml的结构,把它放在这儿供以后使用 1 /// <summary> ...

  5. XML序列化和反序列化(C#)

    主要参考资料: http://www.codeproject.com/Articles/483055/XML-Serialization-and-Deserialization-Part-1 http ...

  6. [WPF]xml序列化以及反序列化数据

    代码 XML序列化工具类 public static class XMLHelper{/// <summary>/// 将对象序列化为指定的文件名/// </summary>/ ...

  7. C# XML 序列化 及 反序列化

    百科:序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态, ...

  8. ASP.NET 对类进行XML序列化和反序列化

    1 序列化方法 public void SerializeObject<T>(string Xmlname,T t){XmlSerializer ser = new XmlSerializ ...

  9. XML序列化和反序列化 以及相关类的写法

    类的写法: 省网办数据对接中运用到 using System; using System.Collections.Generic; using System.Linq; using System.Te ...

最新文章

  1. 一条龙奇迹私服WEB系统后门及bug
  2. 转: 常见加密算法分,用途,原理以及比较
  3. Java主线程等待子线程、线程池
  4. 主板模式的两项通用性接口
  5. 镜像服务器文件实时监控同步程序
  6. java 数组下标6,这里为什么用equals会错,改==就不会?java入门第一集6.8获取数组下标课后练习...
  7. Java笔记-解决SSLHandshakeException: No subject alternative names present
  8. 提交日期表单状态操作_奇怪的知识又增加了,表单还能查寝?
  9. 使用「Bartender」创建简洁的Mac菜单栏
  10. 408考研经验分享(待更
  11. android 不同机型 bug,[Android] Opengl ES 机型适配 bug 汇总
  12. HTML练习4制作京东登录页,day4 CSS属性和京东登录
  13. 主打python-2021年度总结-展望2022年
  14. 电脑播放视频显示运行服务器失败,电脑不能播放视频如何解决?
  15. Unity功能——设备硬件绑定(通过设备SN码)
  16. 数据库三级填空题(应用题)常考总结
  17. 【大数据入门核心技术-HBase】(九)Hbase协处理器coprocessor
  18. k8s(二):cenos7下搭建k8s集群(kubeamd方式)
  19. python 京东 抢券_Python写一个京东抢券脚本
  20. 机器人学中的Pieper准则【学习感悟】

热门文章

  1. MJRefresh iphonx 显示问题
  2. 基于.htaccess的Web Shell工具htshells
  3. 人机接口设备攻击(HID Attack)
  4. java二期_Java架构师鲁班二期
  5. ueditor集成实例php,Laravel框架集成UEditor编辑器的方法图文与实例详解
  6. c语言物流管理信息系统,[源码和文档分享]基于C语言的物流配送管理信息系统...
  7. ansys18安装以后打不开_Ubuntu18.04安装Python各个版本之后导致终端无法打开的解决办法...
  8. 如何用excel制作xy曲线图_用Excel制作一个简易抽奖小程序,可一次抽取多人
  9. JStorm与Storm源码分析(八)--计时器工具-mk-timer
  10. PSVR开发者需要了解的9件事