开心网外挂开发之 XML序列化于反序列化
通过昨天的文章我们已经了解了开发一个开心网的外挂所需要的最基本的东本,接下来的工作可以说基本上就上围绕这个基础来进行的,我写这一系列文章主要的目地不仅仅是为了让大家了解怎么开发开心网外挂,最主要的目过还是通过一个实例程序的编程,让初学者了解C#。
因为好多初学都看了很多基础性的东西,了解到了C#有好多特性, 但这些特性到底是干吗用的,或用了有什么好处了解的不够清楚,所以我在这一系列中,会陆续介绍
- XML序列化
- 泛型
- 设计模式的运用
- 多线程
等等这些都将会在我的程序中被运用到,今天先写XML序列化与反序列化,其实我的程序主要用到的是XML的反序列化,我们先了解一下XML序列化与反序列化是怎么回事
XML序列化与反序列化
MSDN中是这么说的:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。反之,反序列化根据流重新构造对象。
在C#中XML 序列化中的中心类是 XmlSerializer 类,该类中最重要的方法是 Serialize 和 Deserialize 方法。简单的示例我就不从MSDN中抄了, 大家了解了就行, 不了解去翻MSDN。下面我会到我们的程序, 为什么我们要用到序列化。
为什么我们需要XML序列化
我们先对开心网的各种操作进行分析,我把我会发现,开心网好多操作请求服务器后,服务器会返会一个XML格式的字符串。比如说,我们的花园信息,我们会发现,服务器端返回的是这么一个XML


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

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


1

2

3



4

5

6

7

8

9

10

11

12



13



14

15

16

17



18

19



20

21

22

23



24

25

26

27

28

29

30

31

32

33

34



35

36

37

38



39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61



62

63



64

65



66

67

68

69



70

71

72

73

74

75



76

77



78

79

80

81

82

83



84

85

86

87

88

89



90

91



92

93

94

95

96



97

98

99

100

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


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试试吧。明天我们继续
【推荐】国内首个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吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构