如何在string类型的元素上拥有属性

时间:2009-03-28 03:44:11

标签: c# xml-serialization

如果我有

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

如何在不声明类(其类型只是字符串)的情况下在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 个答案:

答案 0 :(得分:1)

如果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");