Подтвердить что ты не робот

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

Я использую DatacontractSerializer для сериализации моего доменаModel в 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 или любую другую схему.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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