Как создать XML с атрибутами, а не с узлами, используя XmlResult от MvcContrib? - PullRequest
2 голосов
/ 22 февраля 2011

Я пытаюсь сгенерировать вывод XML из типа в C #.Я использую класс MvcContrib XmlResult, ссылку на который я включил ниже.

В качестве простого теста, чтобы увидеть, могу ли я заставить его работать, я использую следующий код:

var topTen = new TopTen
{
    PerformanceTo = DateTime.Now,
    ShareClasses = new List<TopTenShareClass>()
                        {
                            new TopTenShareClass{Id = 1, Name = "a"},
                            new TopTenShareClass{Id = 2, Name = "b"},
                            new TopTenShareClass{Id = 3, Name = "c"}

                        }
};

return new XmlResult(topTen);

(с двумя типами, определенными как:)

public class TopTen
{
    public DateTime PerformanceTo { get; set; }
    public List<TopTenShareClass> ShareClasses { get; set; }
}

public class TopTenShareClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}

для создания этого вывода XML

<?xml version="1.0" encoding="utf-8"?>
<TopTen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PerformanceTo>2011-02-22T10:56:41.3094548+00:00</PerformanceTo>
  <ShareClasses>
    <TopTenShareClass>
      <Id>1</Id>
      <Name>a</Name>
    </TopTenShareClass>
    <TopTenShareClass>
      <Id>2</Id>
      <Name>b</Name>
    </TopTenShareClass>
    <TopTenShareClass>
      <Id>3</Id>
      <Name>c</Name>
    </TopTenShareClass>
  </ShareClasses>
</TopTen>

Мне интересно, возможно ли иметь идентификатор и имятеги появляются как атрибуты в узле TopTenShareClass, а не сами узлы?В идеале XML должен выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<TopTen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PerformanceTo>2011-02-22T10:56:41.3094548+00:00</PerformanceTo>
  <ShareClasses>
    <TopTenShareClass Id=1 Name='a'></TopTenShareClass>
    <TopTenShareClass Id=2 Name='b'></TopTenShareClass>
    <TopTenShareClass Id=3 Name='c'></TopTenShareClass>
  </ShareClasses>
</TopTen>

Для справки определение XmlResult доступно здесь: http://mvccontrib.codeplex.com/SourceControl/changeset/view/5f542a2e51e9#src%2fMVCContrib%2fActionResults%2fXmlResult.cs

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Полагаю, для реализации просто используется XmlSerializer, поэтому:

public class TopTenShareClass
{
    [XmlAttribute]
    public int Id { get; set; }
    [XmlAttribute]
    public string Name { get; set; }
}

Полный список находится в MSDN: Атрибуты, управляющие сериализацией XML

По вашему примеру, я бы на самом деле ожидал:

<TopTenShareClass Id="1" Name="a"/>
<TopTenShareClass Id="2" Name="b"/>
<TopTenShareClass Id="3" Name="c"/>
1 голос
/ 22 февраля 2011

Вы можете контролировать процесс сериализации XML , используя атрибуты :

public class TopTenShareClass
{
    [XmlAttribute]
    public int Id { get; set; }

    [XmlAttribute]
    public string Name { get; set; }
}
...