为什么我的List <t>没有被序列化?</t>

时间:2010-08-18 09:43:44

标签: c# list serialization tree

这与this question有关,但这次我试图找出如何序列化字典。我有一个继承自Dictionary的类,我需要能够序列化。

序列化方法看起来像这样,基本上字典中的值集合被添加到列表中,序列化了。

[Serializable]
public class Collection: SortedDictionary<Key, Node>, ISerializable
{  
    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        List<Node> Nodes = new List<Node>();
        // The "Values" mentioned here is the SortedDictionary's Values collection
        Nodes.AddRange(Values);
        info.AddValue("Nodes", Nodes, Nodes.GetType());
    }

    public Collection(SerializationInfo info, StreamingContext context)
        : base(new Key.Comparer())
    {
        List<Node> SerValues = (List<Node>)info.GetValue("Nodes", typeof(List<Node>));
        foreach (Node ThisNode in SerValues)
        {
            // This add method has been extended so that it automatically generates the key.
            Add(ThisNode);
        }
    }
}

但是,当我调用deserialize构造函数时,列表包含正确的值,只是空值。

我怀疑这是因为节点尚未反序列化(我知道它们可以序列化),但是我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

您是否尝试Xml序列化/反序列化字典?这就是您实现ISerializable接口并使用SerializationInfo的原因吗?

虽然Xml序列化程序不支持通用字典类型,但DataContractSerializer会这样做,也许您可​​以尝试使用它?如果不这样做,这里是一个Xml可序列化字典的实现,可能值得一看:

http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx

答案 1 :(得分:0)

您是否尝试在集合类中使用[Serializable]属性?结果是一样的吗?

(为什么使用ISerializable而不是属性?)

答案 2 :(得分:0)

如果我没弄错,词典不可序列化。

烨: http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/5115ff4c-75a6-4a96-9c6b-b840e04c650d/

这也意味着只是继承它并调用子Serializable将无法正常工作。您将不得不使用另一个容器 - 通常是自定义类Key / Value容器的数组 - 没有太严重。

答案 3 :(得分:0)

您可能希望使用代理(实现ISerializationSurrogate)而不是上述方法。

请查看http://msdn.microsoft.com/en-us/magazine/cc188950.aspx示例。