什么更符合我的需要(XML \ Json)以及如何使用它?

时间:2015-09-20 19:59:17

标签: c# json xml

我在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>

在给定此示例结构的情况下,如何从文件中获取数据?

1 个答案:

答案 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)});

结果:

results

(我在这里使用LinqPad代表结果,强烈推荐使用linq和linq for xml)