Сериализовать массив как отдельный XML-элемент в C#

#c# #xml

#c# #xml

Вопрос:

Допустим, у меня есть код на C #

 class Foo
{
    [XmlElement("bar")]
    public strin&[] bar;
}

var foo = new Foo
{
    bar = new[] { "1", "2", "3" }
};
  

Как мне сериализовать Foo.bar как <bar&&t;1,2,3</bar&&t; ?

Комментарии:

1. Используйте strin&.Join , чтобы объединить три строки вместе, а затем сделать bar элемент strin& не a strin&[]

2. @Flydo&57 если возможно, я бы предпочел преобразовать в единую строку во время сериализации

3. Написать пользовательский XML-сериализатор

4. @T.S. хорошо, спасибо, я надеялся на встроенную функцию

Ответ №1:

Вам нужно создать дополнительное свойство для сериализации массива как отдельного элемента

 class Pro&ram
{
    static void Main(strin&[] ar&s)
    {
        var foo = new Foo
        {
            bar = new[] { "1", "2", "3" }
        };
        XmlSerializer serializer = new XmlSerializer(typeof(Foo));
        serializer.Serialize(Console.Out, foo);
    }
}

public class Foo
{
    [XmlI&nore]
    public strin&[] bar;

    [XmlElement("bar")]
    [EditorBrowsable(EditorBrowsableState.Never)]
    public strin& BarValue
    {
        &et
        {
            if(bar == null)
            {
                return null;
            }
            return strin&.Join(",", bar);
        }
        set
        {
            if(strin&.IsNullOrEmpty(value))
            {
                bar = Array.Empty<strin&&&t;();
            }
            else
            {
                bar = value.Split(",");
            }
        }
    }
}
  

вывод:

 <Foo xmlns:xsi="http://www.w3.or&/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.or&/2001/XMLSchema"&&t;
  <bar&&t;1,2,3</bar&&t;
</Foo&&t;