Удалите префикс пространства имен «d1p1» в выходных данных DataContractSerializer XML - PullRequest
14 голосов
/ 22 февраля 2012

Я использую 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 ]

5 голосов
/ 25 апреля 2013

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

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

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

DataContractSerializer deserializer = new DataContractSerializer(typeof(MyClass), typeof(MyClass).Name, "");
4 голосов
/ 15 августа 2012

Похоже, DataContractSerializer не дает большого контроля над префиксами.Ответ на Сериализация XML и префиксы пространства имен предлагает использовать XmlSerializer, если вы хотите управлять префиксом пространства имен.

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

0 голосов
/ 01 ноября 2016

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

...