2015-06-03 37 views
1

我正在寻找解决方案来读取和写入文件中的数据。数据是一个列表,包括文件路径,名称以及系统上用于视频回放应用程序的兼容视频格式列表。 XML数据结构看起来像这样。WPF读取/写入JSON与XML

<player> 
    <name>WMP</name> 
    <path>C:\Program Files (x86)\Windows Media Player\wmplayer.exe</path> 
    <extensionList> 
     <string>AVI</string> 
     <string>WMP</string> 
    </extensionList> 
</player> 

我以前使用的XMLSerializer序列化其工作相当不错的球员类的列表,并在此之前,我曾使用SQL。我最近听说过JSON,并希望在存储数据时扩大我的选择范围。有没有人有任何建议,哪种格式更适合我的WPF应用程序,或者是否有更好的适合我的需求的数据访问方法。

+0

JSON通常比XML小得多 - 但也有时不为可读。如果用户永远不会读取您的XML文件,那么我只会使用JSON来处理文件大小。你可能想看看[JavaScriptSerializer](https://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer%28v=vs.110%29.aspx),但我会**高度**推荐你,而不是去与[Newtonsoft Json.NET](http://www.newtonsoft.com/json)。如果您需要了解数据类型以及文件中没有的内容,那么XML就是要走的路。 – MightyLampshade

+1

@MightyLampshade我认为我会纯粹为了可读性去使用XML,因为尺寸真的不是问题。 – Timmoth

回答

1

Theoreretical好处是,你可以有某种使用XPath和potentionally工作具有更大的数据集查询的。

特别是在WPF你有XmlDataProvider,在那里你可以直接进行数据绑定你的UI控件到XML节点。

这就是理论。在现实世界中,您几乎肯定会将您的xml反序列化为数据传输对象,因此您可以利用强类型类,编译时检查,OOP等。在这种情况下,xml的优点是无关紧要的。

另一方面,JSON文件略小,JSON序列化程序稍快,可能更好的人类可读性。

文件大小在web场景中扮演角色,您需要在客户端和服务器之间传输数据(与JavaScript不同,JSON格式来自JavaScript),但这不是您的情况。除非您使用大型数据集,否则您可能不必关心序列化性能。

在你的情况下,JSON和XML都不会更好或更糟。两者都能很好地完成这项工作,而且你不能做出错误的决定。

Imho,如果你以前一直在使用XML,现在就去使用JSON,那么你将有两种经验,你会学到一些新的东西。最后,这只是几行代码,您可以在需要时轻松地将序列化逻辑更改为其他内容。

0

JSON和XML正在做同样的事情:将数据表示为文本。 JSON不比XML冗长,所以你的文件会更轻。 解析JSON比解析XML更快。

您可以检查this lib解析JSON。

+0

感谢您与NuGet的链接,正在寻找Json.Net的免费替代品。 – Timmoth

2

当我明白你的问题,你只需要存储和应用程序中的消费数据,并且不希望与其他应用程序交换它。

JSON的格式有导致较小的文件,一个非常低的开销 - 这就是为什么它是在移动场景经常使用。另外,正如其名称“JavaScript Object Notation”所表达的那样,JavaScript可以很好地处理它,使其成为Web应用程序的理想选择。

,因为它在过去几年中得到了广泛的使用有用于.NET可序列化.NET波苏斯到JSON,例如良好的图书馆JSON.NET

就你而言,它或多或少取决于你的个人选择。根据您描述的要求,我没有看到使用JSON而不是XML序列化的强有力的理由。 XML的

1

正如其他答案,如果你需要你的文件更小(例如在移动/ Web应用程序中)JSON是要走的路,因为文件较小。另一方面,如果文件大小不是问题,那么我会使用XML,因为如果这些文件是易失性的并且会改变它们的形式很多(在这种情况下你会做的比视频播放应用程序更多),它会难以序列化所有这些XML文件。这里是LINQ to XML。即使你没有在这个应用程序中使用它,你也应该阅读这个。从LINQ到SQL到LINQ to XML的形式,LINQ都非常有用。

读自herehere

+0

感谢林克链接...我有一些使用它的经验,绝对看到它的用途。 – Timmoth