本机Xml处理或(外部)lib

时间:2013-04-11 12:25:25

标签: c# xml-deserialization

我有多个具有不同配置的项目,所有这些配置必须在单个XML文件中指定。这不是app.config,而是在通用位置指定的。

我目前的项目结构:

  • 核心项目(带有一些XML)
  • 子项目(需要以通用方式访问核心XML配置+从同一XML文件中自己配置)

哪种.NET XML技术最适合这种?

提前致谢

3 个答案:

答案 0 :(得分:1)

我没有在你的帖子中读到任何建议,即.Net框架的内置Xml功能不能完成任务。

我几乎每天都在使用Xml,而且我还没有需要任何外部库。这当然取决于您的项目要求,但是您有两个项目将使用相同的功能,因此您可以(并且应该)轻松地对两个项目的Xml处理进行抽象和隔离,或者引用您自己的核心\子项目中的xml类或(我的偏好)在单独的dll项目中。一个dll可以在将来为你服务。

编写自己的Xml功能的另一个好处是,您可以更深入地了解.Net Xml命名空间的内部工作原理,这些知识绝不会浪费,而您可以通过使用外部设备来远离它库(通常只是.Net类的包装和外观)

希望这有点帮助和快乐编码。

答案 1 :(得分:1)

app.config文件可能是最适合的。您可以创建自己的配置节,并且所有引用的程序集都可以访问项目的单个配置文件,因此每个程序集都可以有自己的节。 您还可以在user.config中进行特定于用户的配置(请参阅Application Settings Architecture)。

如果您无法使用app.config,因为它需要位于特定位置,您始终可以使用ConfigurationManager.OpenMappedExeConfiguration

从其他位置加载app.config文件

其他替代方案:

  • 使用XmlSerializer通过您的配置将XML反序列化为POCO。
  • 受虐狂选项:使用普通XDocumentXmlDocument手动解析配置文件。

答案 2 :(得分:0)

该问题的当前解决方案:

使用LINQ to XML我采用了与对象匹配的XML元素。此XML元素低于根目录下的一个级别。通过这种方式,我首先'过滤'根标签,然后通过反序列化将其转换为字符串到对象。

例如

<root>
    <project1>
       <somevalue>myvalue</somevalue>
    </project1>
    <project2/>
</root>

如果我想从project1获取所有内容,我将获得带有LINQ to XML后代的字符串,然后将字符串反序列化为相应的对象。