Сериализируйте Объекты с помощью xmlSerializer. Сериализируйте и объекты IEnumerable

У меня есть объект, который содержит объект, который является definded как IEnumerable, т.е.

[Serializable]
[XmlRoot("MyObject")]
public class MyObject
{
    [XmlAttribute]
    public string Name { get; set; }

    [XmlArrayAttribute("Numbers")]
    public IEnumerable<string> Numbers { get; set; }
}

Когда я выполняю XmlSerializer. Сериализируйте против объекта, т.е.

        MyObject myObject = new MyObject() { 
            Name = "My Name" ,
            Numbers= new List<string>(){"One", "Two"}
        };



     var xmlSerializer = XmlSerializer.FromTypes(new[] 
{ typeof(MyObject) })[0];
            using (var xmlWriter = XmlWriter.Create(@"MyObject.xml"))
            {
                if (xmlWriter != null) xmlSerializer.Serialize(xmlWriter, myObject);
            }

Я добираюсь

"Не может сериализировать участника SerializeObjects. MyObject. Числа системы типов. Наборы. Универсальный. IEnumerable '1 [[Система. Строка, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], потому что это - интерфейс".

Который я понимаю, что Вы не можете сериализировать интерфейс.

Теперь для вопроса:

Что является лучшим объявлением для "общедоступных Чисел IEnumerable {добираются; набор;}"?

Если я использую List<>, если не, почему нет?

11
задан Robert Harvey 28 April 2010 в 13:39
поделиться

2 ответа

В общих чертах вы должны использовать Collection , если вы хотите, чтобы пользователи вашего класса могли свободно изменять его, или ReadOnlyCollection , если вы этого не сделаете. Не рекомендуется использовать List в публичных интерфейсах ( источник ).

Однако, поскольку этот класс предназначен для сериализации XML и, следовательно, предположительно не используется ни для каких других целей, кроме представления XML в качестве объектной модели, правила на самом деле не применяются так же, как «нормальный» API, потому что он не будет иметь других потребителей, кроме XmlSerializer , поэтому на самом деле не имеет большого значения, что вы используете. Хотя я бы, наверное, по-прежнему придерживался рекомендаций.

8
ответ дан 3 December 2019 в 10:25
поделиться

Если вы не против того, чтобы список можно было редактировать, т.е. добавлять/удалять публично, то List<> вполне подойдет. В противном случае вам следует использовать ReadOnlyCollection

1
ответ дан 3 December 2019 в 10:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: