如何序列化Key和通用Dictionary的唯一对象值<tkey,tvalue =“”>?</tkey,>

时间:2010-10-19 08:28:52

标签: silverlight serialization dictionary

我期待序列化一个字典,以便将其中的一些信息,更准确地说是Key和其中一个值,保存到Silverlight Isolated存储中。我已经阅读了很多关于这些董事会讨论同一主题的问题,但没有人解释我试图做什么,或者至少不是我能理解的方式。我也不知道我可以序列化它:XmlSerializer,JSON等...我正在尝试执行此序列化以“保存”一些用户设置,我不打算将它们发送到Web服务或任何其他东西,它只会在应用程序内部使用。

这是我的词典的结构:

static Dictionary<string, User> Mydictionary

这是'用户'类:

public class User
{
    public User()
    {

    }

    public string name;
    public string age;
    public string groups;
}

我想保存对象的Key和'groups'值,并仅序列化这两个信息。我问自己是否有可能?

谢谢你,Ephismen。

1 个答案:

答案 0 :(得分:2)

使用 Linq 对XML进行序列化/反序列化非常简单,如果您还不知道,我强烈建议您查看它。

序列化将如下所示:

// add reference to System.Xml.Linq

var xml = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"),
    new XElement("users",
    from pair in dic
    select new XElement("user",
        new XAttribute("userId", pair.Key),
        new XAttribute("Groups", pair.Value.groups))));

// xml.Save(...) to save in the IsolatedStorage

反序列化:

XDocument loaded = XDocument.Load(...your stream...);

var results = from c in loaded.Descendants("users")
        select new {
            userIdAttribute = (string)c.Attribute("userId"),
            groupsAttribute = (string)c.Element("Groups")
        };

foreach (var user in results)
{
    dic.Add(user.userIdAttribute,
        new User()
        {
            name = user.userIdAttribute,
            groups = user.groupsAttribute
        });
}

您可以找到一些好的文档here和一些示例here