Как иметь атрибут для элемента типа string - PullRequest
1 голос
/ 28 марта 2009

Если у меня есть

[XmlElement(ElementName = "Title")]
public string Title;

Как я могу включить атрибут в заголовок, не объявляя класс (его тип - просто строка) ?? так что когда я сериализуюсь с использованием XML-сериализатора, вывод будет примерно таким:

<Movie>
  <Title x:uid="movie_001">Armagedon</Title>
  <Date>010101</Date>
<Movie>

и не так:

<Movie>
  <Title x:uid="movie_001" MovieTile="Armagedon"\>
  <Date>010101</Date>
<Movie>

1 Ответ

1 голос
/ 28 марта 2009

Я не думаю, что это возможно без использования Title в качестве пользовательского типа или явной реализации методов сериализации.

Вы можете создать собственный класс, например ...

class MovieTitle
{
    [XmlText]
    public string Title { get; set; }
    [XmlAttribute(Namespace="http://www.myxmlnamespace.com")]
    public string uid { get; set; }
    public override ToString() { return Title; }
}

[XmlElement(ElementName = "Title")]
public MovieTitle Title;

, который должен произвести:

<Title x:uid="movie_001">Armagedon</Title>

Хотя сериализатор может делать интересные вещи с неизвестными пространствами имен.

Вы можете избежать странного поведения, объявив свои пространства имен и предоставив объект сериализатору.

  XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
  ns.Add("x", "http://www.myxmlnamespace.com");
...