Класс сериализации, украшенный XmlRoot, ошибка при использовании в List - PullRequest
1 голос
/ 08 января 2011

Когда я пытаюсь сериализовать элемент класса типа Test, он дает xml с корневым элементом как «testing», который устанавливается с помощью XmlRoot.

Но когда я пытаюсь сериализовать элемент класса Elems, элемент Test сериализуется с корневым элементом «Test» вместо «testing».

[XmlRoot("testing")]
public class Test
{
}

public class Elems
{
   public List<Test> how = new List<Test>();

    public Elems()
    {
        how.Add(new Test());
        how.Add(new Test());
        how.Add(new Test());
    }
}

Это вывод при сериализации элементов,

<Elems xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x
mlns:xsd="http://www.w3.org/2001/XMLSchema">
  <how>
    <Test />
    <Test />
    <Test />
  </how>
</Elems>

Вместо этого это то, что мне нужно.

<Elems xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x
mlns:xsd="http://www.w3.org/2001/XMLSchema">
  <how>
    <testing />
    <testing />
    <testing />
  </how>
</Elems>

Спасибо

1 Ответ

3 голосов
/ 08 января 2011

Попробуй так:

public class Test { }

public class Elems
{
    public Elems()
    {
        How = new List<Test>();
        How.Add(new Test());
        How.Add(new Test());
        How.Add(new Test());
    }

    [XmlArray("how")]
    [XmlArrayItem("testing")]
    public List<Test> How { get; set; }
}

class Program
{
    static void Main()
    {
        var elems = new Elems();
        var serializer = new XmlSerializer(elems.GetType());
        serializer.Serialize(Console.Out, elems);
    }
}
...