0

我有一个序列化为 SQL 数据库的列表。我正在使用 EntityFramework,如果模型中有一种方法能够提取字段(存储为 varchar(MAX) - 序列化 base64)并反序列化到列表中,那就太好了。然后,在保存时,我希望能够让它自动序列化。

我首先使用 EF 模型。

public string HostList { get; set; }

上面的示例是我想要的主机列表。它应该是一个列表,并且当前以 varchar(MAX) 的形式存储在数据库中。我在考虑 XML 序列化等并将其存储为 xml,但这无助于返回我想要的格式。

4

1 回答 1

0

您可以编写一个可序列化为字符串的列表类。

未测试示例:

public class AddressList : IList<IPAdress>
{
    public string Serialized { get; private set; }

    private List<IPAddress> _innerList = new List<IPAddress>();

    //To be informed when the list is modified.
    public event EventHandler OnModified;

    public AddressList(string serializedString)
    {
        //Init the collection from the serialized string
    }

    public void Add(IPAdress item)
    {
        _innerList.Add(item)

        //Update the serialized string
        UpdateString();
    }

    public void Remove(IPAdress item)
    {
        _innerList.Remove(item);

        //Update the serialized string
        UpdateString();
    }

    private void UpdateString()
    {
        //Do your update job.

        //Call the event.
        if (OnModified != null)
            OnModified(this, EventArgs.Empty);
    }

    //Rest of IList implementation....
}

然后在您的实体中:

public partial class MyEntity
{
    private AddressList _addresses;

    public IList<IPAdress> Adresses
    {
        get
        {
            if (_addresses == null)
            {
                _addresses = new AddressList(HostList);
                //When the list is modified, you want to update your property.
                _addresses.OnModified += delegate(object sender, EventArgs e)
                {
                    HostList = ((AddressList) sender).Serialized;
                };
            }
            return _adresses;
        }
    }
}

这样,当您从列表中添加/删除项目时,字符串会“自动”更新。

于 2013-06-18T16:14:03.220 回答