我想要从xml内容中省略xmlns:xsi,xmlns:xsd和xmlns属性的选项。这样做时反序列化失败了。
这是xsd定义:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema id="CSVDataPluginConfig"
targetNamespace="http://tempuri.org/CSVDataPluginConfig.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/CSVDataPluginConfig.xsd"
xmlns:mstns="http://tempuri.org/CSVDataPluginConfig.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<xsd:element name="CSVDataPluginConfig" type="CSVDataPluginConfig"/>
<xsd:complexType name="CSVDataPluginConfig">
...
</xsd:complexType>
</xsd:schema>
xsd.exe代码生成器正在提供:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(
Namespace="http://tempuri.org/CSVDataPluginConfig.xsd")]
[System.Xml.Serialization.XmlRootAttribute(
Namespace="http://tempuri.org/CSVDataPluginConfin.xsd", IsNullable=false)]
public partial class CSVDataPluginConfig {
}
这是成功反序列化的xml内容示例:
<?xml version="1.0" encoding="utf-16"?>
<CSVDataPluginConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://tempuri.org/CSVDataPluginConfig.xsd">
...
</CSVDataPluginConfig>
为了简单起见并且更容易手写xml,我希望能够成功地反序列化以下内容:
<CSVDataPluginConfig>
...
</CSVDataPluginConfig>
我正在使用此扩展方法进行反序列化:
public static T DeserializeXML<T>(this string xml)
{
T obj;
using (StringReader reader = new StringReader(xml))
{
obj = (T)new XmlSerializer(typeof(T)).Deserialize(reader);
reader.Close();
}
return obj;
}
使用Visual Studio 2008,我有哪些选择,最佳选择是什么?
答案 0 :(得分:0)
抱歉,您实际上并没有拥有选项。
XML的作者(正确地)使用名称空间。这意味着XML位于命名空间中,您必须使用它。
事实上,通过良好的XML编辑器,命名空间使更容易手动输入它。命名空间映射到模式,模式可以通知XML编辑器如何帮助您进行数据输入。在Visual Studio 2010中尝试XML编辑器,你会明白我的意思。只需确保模式可用(可能在同一个项目中),只要输入<CSV
TAB