2013-02-27 75 views
0

我想构建C#二进制解码器。我有描述二进制文件数据结构的XML文件。使用xml指定数据结构的二进制解码器

下一步是根据该XML动态制作数据结构(在代码中)。 你们是否对我有任何意见,链接,代码等?

我知道这是一般性的问题,但我只想开始一些地方,我不知道从哪里知道。

编辑:

对不起需要删除代码...

BR

+0

你有两个问题。一个有点太宽泛(如何解码二进制信息),另一个是如何读取XML文件。您应该将问题分为两部分,并为每个具体问题提供更多信息。 – jgauffin 2013-02-27 12:02:29

+0

是的,我知道这一点。问题在于这个问题是连接的。我需要编写基于XML构建C#结构或类的代码。读取XML不是问题,有许多简单的方法可以做到这一点,但诀窍是如何从该XML(在代码中)生成结构或类。 – JohnDoeKazama 2013-02-27 12:09:12

+0

不,他们没有真正相关。您可以阅读XML并创建C#类,其中包含有关如何构建对象的说明。 XML部分只是指令的序列化,而不是真正的生成问题的一部分。您仍然需要提供XML包含的内容?类名/属性名称?或者,您应该使用哪些数据来试图找出数据类型? – jgauffin 2013-02-27 12:22:32

回答

0

要读取和写入XML文档的内容,您可以使用C#提供XmlDocument类。

这里有一些链接,它可以帮助你:

+0

链接只有答案不允许在这里。您应该提取一个代码片段,其中显示了如何执行任务。 – jgauffin 2013-02-27 12:01:10

+0

嗨,thx回答,但阅读XML并不是问题。问题是如何从代码中的xml生成结构或类。 – JohnDoeKazama 2013-02-27 12:09:59

1

由于要动态创建的数据结构(而不​​是静态建立基于XML定义类),我想你需要一个通用的数据结构,然后你可以查询。这看起来像什么,取决于你描述的是什么样的数据结构。它是记录和字段吗?层次结构中是否存在多种记录类型?如果没有层次结构,则可以为每个字段使用键值对的字典。如果有层次结构,我会认为可导航的树会覆盖大多数场景。你可以为此使用XML DOM,但我认为这不是最干净的解决方案,我更喜欢使用通用树结构。没有内置的(请参阅Tree data structure in C#),但使用泛型创建一个相当容易。

编辑

上述假设要动态创建一个结构是使用动态。 如果你想以动态方式创建一个代码结构,将使用静态地使用(例如,你想能够写出类似myDataStrucureThatWasDefinedInXml.MyProperty1的东西),请看看CodeDom。

并且想到了更多关于它的内容,它取决于您想要做什么,一旦你已经反序列化你的二进制数据。您可能还想查看Expando对象和表达式树。

+0

嗨,这是非常有趣的答案。关键的问题是我有这个xml文件,它描述了如何解码和解析数据(例如:包含9个参数的先到先头,其中这两个参数是可选的,等等),并且这个XML **将来会改变** 。编辑:还有xsd文件,这是我的xml文件desc(但xml和二进制文件被输入到应用程序)。 – JohnDoeKazama 2013-02-27 12:52:23

+1

如果XML将发生变化,我认为你对数据的处理是相当通用的,不依赖于那里的某些数据?否则,每次XML更改时,需要更改处理反序列化数据的代码。如果是这样,这听起来像你需要通用的数据结构方法。 – Giles 2013-02-27 13:01:51

+1

我从您添加的示例代码中看到,您正试图直接读取结构(我没有意识到这是在内存中)。由于您没有精确的结构,因为它是用XML定义的,所以您不得不将二进制数据读取为结构,而只是将其读取为字节数组。然后,根据您的XML定义,您必须解释该数组(并将其放入通用结构或动态对象等中)。 – Giles 2013-02-27 13:22:23