我正在使用C#,我正在尝试将XML文件反序列化到我的应用程序中。这是一个线程化进程,它从多个目录中提取XML文件,其中每个目录可能具有基于客户需求的特定模式。
我要做的是使用特定目录的模式,我需要将反序列化器从XML文件加载到我的应用程序中的对象中。但是,如果未在XML文件中指定该元素,我需要反序列化器从模式中获取默认值。
我发现有一种方法可以使用[XmlSchemaProviderAttribute(“GetSchemaFile”)]属性和静态方法(ref http://msdn.microsoft.com/en-us/magazine/cc300797.aspx)指定类的模式位置。然而,这对我目前的情况不起作用,因为我有多个特定于不同文件的模式。
有谁知道这样做的方法?或者我应该尝试找到另一种方法来处理我对默认值的需求吗?
答案 0 :(得分:1)
每个XML文件都应指定它使用的架构。这通常在根元素中完成。
在下面的示例中,架构与XML文件位于同一目录中。显然,相对于XML文件,这将根据模式的位置而改变。但是,关键是您使用XML文件来引用架构。然后,XML解析器将自动应用任何默认值。
<node name="/org/freedesktop/sample_object"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="introspect.xsd">
这是link,其中简要介绍了如何引用架构。
答案 1 :(得分:0)
所以我有机会测试你的建议@David使用noNamespaceSchemaLocation,并且XmlSerializer似乎没有从那里列出的模式中提取任何信息作为默认值。我一直在寻找一种方法来完成这项工作,因此我发布了这个原因。
*编辑*
在查看了许多不同的站点之后,我发现如果Schema必须是动态的,那么使用C#XML Serializer反序列化方法从模式中提取默认值是不可能的,这意味着被反序列化的对象可能具有不同的默认值模式。
我有一个解决方案,可以在我目前的情况下解决此问题,以便我们的软件处理默认设置。
感谢@David的建议。非常感谢他们。