Можно ли десериализовать XML в List < T & gt ;?

CI выбрасывает

A Database Error Occurred
Unable to connect to your database server using the provided settings.

или что-то подобное при сбое соединения

147
задан Daniel Schaffer 29 October 2012 в 17:16
поделиться

4 ответа

Вы можете инкапсулировать список тривиально:

using System;
using System.Collections.Generic;
using System.Xml.Serialization;

[XmlRoot("user_list")]
public class UserList
{
    public UserList() {Items = new List<User>();}
    [XmlElement("user")]
    public List<User> Items {get;set;}
}
public class User
{
    [XmlElement("id")]
    public Int32 Id { get; set; }

    [XmlElement("name")]
    public String Name { get; set; }
}

static class Program
{
    static void Main()
    {
        XmlSerializer ser= new XmlSerializer(typeof(UserList));
        UserList list = new UserList();
        list.Items.Add(new User { Id = 1, Name = "abc"});
        list.Items.Add(new User { Id = 2, Name = "def"});
        list.Items.Add(new User { Id = 3, Name = "ghi"});
        ser.Serialize(Console.Out, list);
    }
}
130
ответ дан Marc Gravell 29 October 2012 в 17:16
поделиться

Да, это сериализирует и десериализует List<>. Просто удостоверьтесь, что Вы используете [XmlArray] атрибут если в сомнении.

[Serializable]
public class A
{
    [XmlArray]
    public List<string> strings;
}

Это работает с обоими, Сериализируют () и Десериализовывают ().

16
ответ дан Coincoin 29 October 2012 в 17:16
поделиться

Не уверенный в List< T> но Массивы являются, конечно, выполнимыми. И определенное волшебство делает действительно легким добраться до Списка снова.

public class UserHolder {
   [XmlElement("list")]
   public User[] Users { get; set; }

   [XmlIgnore]
   public List<User> UserList { get { return new List<User>(Users); } }
}
5
ответ дан JaredPar 29 October 2012 в 17:16
поделиться

Да, он десериализуется в List <>. Нет необходимости хранить его в массиве и оборачивать / инкапсулировать в список.

public class UserHolder
{
    private List<User> users = null;

    public UserHolder()
    {
    }

    [XmlElement("user")]
    public List<User> Users
    {
        get { return users; }
        set { users = value; }
    }
}

Код десериализации,

XmlSerializer xs = new XmlSerializer(typeof(UserHolder));
UserHolder uh = (UserHolder)xs.Deserialize(new StringReader(str));
7
ответ дан 23 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

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