При желании опустить пространство имен из XML при десериализации?
Я хочу, чтобы опция опускала атрибуты xmlns: xsi, xmlns: xsd и xmlns из содержимого xml. При этом десериализация не удалась.
Это определение 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, какие у меня есть варианты и какой вариант лучше?
1 ответ
Извините, у вас нет выбора.
Автор XML (правильно) использует пространства имен. Это означает, что XML находится в пространстве имен, и вы должны использовать его.
Фактически, с хорошим XML-редактором, пространства имен облегчают его ввод вручную. Пространства имен сопоставляются со схемой, и схема может сообщить редактору XML, как помочь вам с вводом данных. Попробуйте редактор XML в Visual Studio 2010, и вы поймете, что я имею в виду. Просто убедитесь, что схема доступна (возможно, в том же проекте), и она зайдет до заполнения XML заполнителями, как только вы наберете <CSV
TAB