我在C#(MonoGame,如果有所作为)制作游戏,游戏同时拥有服务器和客户端。
我希望客户端保存某些项目的文本表示,这样当我加载客户端时,它将读取文件并将其解析为游戏对象,以便我可以轻松处理项目。
我考虑过使用XML或JSON,我知道两者的基本知识,但我真的不知道 如何在代码中使用它们。
您认为哪种更合适?我认为XML更合适,但我可能错了,这就是为什么我要问......
该文件将具有这种结构
<items>
<item>
<id></id>
<name></name>
<cost></cost>
<description></description>
<pathofimage></pathofimage>
</item>
<item>
<id></id>
<name></name>
<cost></cost>
<description></description>
<pathofimage></pathofimage>
</item>
</items>
在给定此示例结构的情况下,如何从文件中获取数据?
答案 0 :(得分:3)
这取决于,使用内置的.NET命名空间(如System.Xml或System.Xml.Linq)更容易使用XML。
如果您在javascript或某些公共游戏API中使用此数据,JSON可能会更好,但它需要一些第三方库来使用它,如JSON.NET(它提供更好的json支持)。此外,json比xml更轻量级,json中的大量数据会更小。使用linq for xml(System.Xml.Linq命名空间)解析代码示例:
var xmlString = @"<items>
<item>
<id>100</id>
<name>lance</name>
<cost>9.99</cost>
<description></description>
<pathofimage></pathofimage>
</item>
<item>
<id>101</id>
<name>sword</name>
<cost>12.50</cost>
<description></description>
<pathofimage></pathofimage>
</item>
</items>";
var doc = XDocument.Parse(xmlString);
var items = doc.Root.Elements("item").Select(e => new {
Id = int.Parse(e.Element("id").Value),
Name = e.Element("name").Value,
Cost = decimal.Parse(e.Element("cost").Value)});
结果:
(我在这里使用LinqPad代表结果,强烈推荐使用linq和linq for xml)