Удалите префикс пространства имен "d1p1" в выводе XML DataContractSerializer

Я использую DatacontractSerializer сериализовать мою domainModel в XML-файл. Я получаю вывод, как показано ниже.

<z:anyType xmlns:i="http://www.w3.org/2001/XMLSchema-instance" z:Id="1" xmlns:d1p1="DCSerialization_IGITApproach" i:type="d1p1:X" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
  <d1p1:Name z:Id="2">Ankit</d1p1:Name>
  <d1p1:PointsDictionary xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" z:Id="3" z:Size="1">
    <d2p1:KeyValueOfstringPointsArrayq9VX7VJJ>
      <d2p1:Key z:Id="4">key1</d2p1:Key>
      <d2p1:Value xmlns:d4p1="http://schemas.datacontract.org/2004/07/SerializationApproach" z:Id="5">
        <d4p1:points z:Id="6" z:Size="2">
          <d2p1:double>45.5</d2p1:double>
          <d2p1:double>546.45</d2p1:double>
        </d4p1:points>
      </d2p1:Value>
    </d2p1:KeyValueOfstringPointsArrayq9VX7VJJ>
  </d1p1:PointsDictionary>
</z:anyType>

И я хочу избавиться от этих префиксов пространства имен "d1p1" и просто хочу </PointDictionary> как тег вместо </d1p1:PointsDictionary>, Я попытался поместить атрибут DataMember в свойствах моего класса, но это не решает большую часть проблемы. Поскольку выходной XML-файл может быть отредактирован конечным пользователем, я хочу более чистый XML-файл по сравнению с вышеупомянутым.

Первым приоритетом является управление им только с помощью кода, и если это невозможно, перейдите к XSLT или любой другой схеме.

3 ответа

Использование пустого пространства имен, кажется, удаляет префикс. Настройте свой класс с помощью следующего атрибута DataContract:

[DataContract(Namespace="")]
public class MyClass
{ ... }

Затем убедитесь, что для пространства имен установлена ​​пустая строка при (де) сериализации:

DataContractSerializer deserializer = new DataContractSerializer(typeof(MyClass), typeof(MyClass).Name, "");

Это выглядит как DataContractSerializer не дает большого контроля над префиксами. Ответ на префиксы XML Serialization и пространства имен предлагает использовать XmlSerializer если вы хотите контролировать префикс пространства имен.

Ваш вопрос не был ясен относительно того, хотите ли вы полностью удалить префиксы пространства имен для вашей доменной модели. В приведенном выше примере есть несколько префиксов пространства имен: d1p1, d2p1, d4p1. Изменение пространства имен для файла XML в XSL Translation дает некоторые рекомендации по переименованию префиксов с использованием XSLT.

Вы должны быть в состоянии избавиться от этих префиксов, просто убедившись, что классы, которые вы пытаетесь сериализовать в XML, находятся в одном и том же пространстве имен. Например у меня было два класса ApplicationListResponse и Application. Ранее пространствами имен были Models.Responses и Models.Responses.Application. Я изменил оба пространства имен на "Модели", и это избавило от префикса в выводе XML.

Другие вопросы по тегам