При желании опустить пространство имен из XML при десериализации? - PullRequest
0 голосов
/ 06 мая 2011

Я хочу, чтобы опция исключала атрибуты 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 Ответ

0 голосов
/ 06 мая 2011

Извините, у вас нет опции .

Автор XML (правильно) использует пространства имен. Это означает, что XML находится в пространстве имен, и вы должны использовать его.

На самом деле, с хорошим XML-редактором пространства имен облегчают ввод вручную. Пространства имен сопоставляются со схемой, и схема может сообщить редактору XML, как помочь вам с вводом данных. Попробуйте редактор XML в Visual Studio 2010, и вы поймете, что я имею в виду. Просто убедитесь, что схема доступна (возможно, в том же проекте), и она зайдет до заполнения XML заполнителями, как только вы наберете <CSV TAB

...