C# 什么更好:反序列化到对象,而不是仅仅针对XML文档进行xpath?

C# 什么更好:反序列化到对象,而不是仅仅针对XML文档进行xpath?,c#,.net,xml-serialization,.net-1.0,C#,.net,Xml Serialization,.net 1.0,最近,我一直在用C语言进行大量的XML处理,从长期的javascript编码回到C语言后,我真的错过了JS的一些好捷径 我使用了一个相当大的XML文档,它由很多so元素、子元素等组成,表示在线预订的住宿/航班/景点门票 到目前为止,我只是浏览了一下文档,以获取我需要的信息。我现在已经开始将这些函数移到助手函数中。例如,如果预订的航班来自第三方,我们可能希望改变处理预订的方式。这很容易用Xpath检查,我们只检查元素的值。所以我有一个helper函数,它就是这样做的,所以我的Xpath只在一个地方

最近,我一直在用C语言进行大量的XML处理,从长期的javascript编码回到C语言后,我真的错过了JS的一些好捷径

我使用了一个相当大的XML文档,它由很多so元素、子元素等组成,表示在线预订的住宿/航班/景点门票

到目前为止,我只是浏览了一下文档,以获取我需要的信息。我现在已经开始将这些函数移到助手函数中。例如,如果预订的航班来自第三方,我们可能希望改变处理预订的方式。这很容易用Xpath检查,我们只检查元素的值。所以我有一个helper函数,它就是这样做的,所以我的Xpath只在一个地方,并返回bool。我只有十几个,直到现在我一直把整个事情看作是预订,但我们刚刚做了一些工作,这些工作都是关于预订的航班元素,我刚刚创建的最后4个助手与航班非常相关,这让我思考我是否做对了

我已经避免了将整个文档转换为对象的需要,因为由于它的大小,这样做会非常非常痛苦,而且目前还不需要,现在还不是。创建所有这些对象将是一个巨大的痛苦,我曾在类似的项目中工作过,在这些项目中,这条路线已经完成,但尝试调试它或最初让您的头脑绕过它会很痛苦。我们并没有使用所有的文档,我们所做的处理只使用了文档的10%,所以对所有内容进行反序列化似乎有点过度。在JS中反序列化它是轻而易举的事,但C#只是让它变得他妈的冗长。我知道我可以使用XSD.exe来消除一些痛苦,但我发现如果没有一个好的模式(当然不存在),使用起来会非常混乱

但这让我想到,我们应该总是从XML中创建一个庞大的对象集合,还是我所采用的快速方法仍然可以接受?我对它很满意,但我只是试着想清楚,物体是否是一种更好的方式。我们确实转换了它,至少在将来的项目中我们需要它的时候它是可用的

我知道可能会有一些关于体验所有东西的速度的评论,但是它的速度足够快,满足我们目前的需求,所以这不是一个问题

如果您有一个XML模式(XSD),那么我可能总是更喜欢反序列化到对象的方法——使用漂亮的CLR对象更容易、更干净

如果您没有XML模式,并且无法从数据的源/提供者处获取XML模式,那么决策就不太清楚。正如您所说,
XSD.EXE
可以减轻等式中的一些痛苦,但是这样一个推断出的XML模式通常既不完美,也不是非常漂亮


困难的一点——如果您对使用XPath导航XML感到满意,我会坚持使用它。如果您有需要经常解析的XML,那么最终创建XSD可能是一个好主意。

是的,如果您只需要10%的XML,那么XPathing在这里似乎是可以的,因为可能会出现反序列化过度


在C#4.0和DLR中,有一个动态关键字,允许动态探索XML结构。

感谢您花时间回答。知道这没关系,而不是一种“肮脏”的方式,我感觉好多了。干杯。感谢您抽出时间回答。我会读一读动态的东西。但是现在我们不幸地被.net 1困住了我希望你的意思是你被.net 1.1困住了?