Сериализация XML в .NET - PullRequest
3 голосов
/ 17 ноября 2009

У меня есть класс, который я хочу сериализовать в XML. Класс выглядит следующим образом

[XmlRoot("clubMember")]
public class Person
{
   [XmlElement("memberName")]
    public string Name {get; set;}

    [XmlArray("memberPoints")]
    [XmlArrayItem("point")]
    public List<Int32> ClubPoints {get; set;}
}

Когда я сериализую вышеприведенный класс, он генерирует следующий xml

<clubMember>
  <memberName> xxxx</memberName>
  <memberPoints> 
     <point >xx </point>
     <point >xx </point>
  </memberPoints>
</clubMember>

Я хочу сгенерировать xml следующим образом:

<clubMember>
  <memberName> xxxx</memberName>
  <memberPoints> 
     <point value="xx"/>
     <point value="xx"/>
  </memberPoints>
</clubMember>

есть ли способ генерировать xml, упомянутый выше, без изменения структуры класса? Мне действительно нравится сохранять структуру calss нетронутой, потому что она используется везде в моем приложении.

Ответы [ 2 ]

6 голосов
/ 17 ноября 2009

Я не думаю, что это возможно с List<int>. Вместо этого вы можете определить класс Point:

[XmlRoot("clubMember")]
public class Person
{
    [XmlElement("memberName")]
    public string Name { get; set; }

    [XmlArray("memberPoints")]
    [XmlArrayItem("point")]
    public List<Point> ClubPoints { get; set; }
}

public class Point
{
    [XmlAttribute("value")]
    public int Value { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var member = new Person
        {
            Name = "Name",
            ClubPoints = new List<Point>(new[] 
            { 
                new Point { Value = 1 }, 
                new Point { Value = 2 }, 
                new Point { Value = 3 } 
            })
        };
        var serializer = new XmlSerializer(member.GetType());
        serializer.Serialize(Console.Out, member);
    }
}
0 голосов
/ 17 ноября 2009

Я думаю, что единственный способ сделать это - реализовать IXmlSerializable вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...