用Protobuf-net序列化MultiValueDictionary(string,string)时出错

本文关键字:string 出错 Protobuf-net 序列化 MultiValueDictionary | 更新日期: 2023-09-27 18:05:54

我在我的项目(c# - VS2012 - .net 4.5)中使用MultiValueDictionary(String, String),如果你想为每个键提供多个值,这是一个很大的帮助,但我不能用protobuf.net序列化这个对象。

我已经序列化了Dictionary(string,string)与Protobuf轻松和速度和MultiValueDictionary继承自该泛型类型;因此,从逻辑上讲,用相同的协议序列化它应该没有问题。

有人知道解决办法吗?

这是我执行代码时的错误信息:

系统。InvalidOperationException:无法解析合适的Addmethod for System.Collections.Generic.IReadOnlyCollection

用Protobuf-net序列化MultiValueDictionary(string,string)时出错

你真的需要字典吗?如果字典中的条目少于10000个,还可以使用数据类型的修改列表。

    public class YourDataType
    {
        public string Key;
        public string Value1;
        public string Value2;
        // add some various data here...
    }
    public class YourDataTypeCollection : List<YourDataType>
    {
        public YourDataType this[string key]
        {
            get
            {
                return this.FirstOrDefault(o => o.Key == key);
            }
            set
            {
                YourDataType old = this[key];
                if (old != null)
                {
                    int index = this.IndexOf(old);
                    this.RemoveAt(index);
                    this.Insert(index, value);
                }
                else
                {
                    this.Add(old);
                }
            }
        }
    }

像这样使用列表:

    YourDataTypeCollection data = new YourDataTypeCollection();
    // add some values like this:
    data.Add(new YourDataType() { Key = "key", Value1 = "foo", Value2 = "bar" });
    // or like this:
    data["key2"] = new YourDataType() { Key = "key2", Value1 = "hello", Value2 = "world" };
    // or implement your own method to adding data in the YourDataTypeCollection class
    XmlSerializer xser = new XmlSerializer(typeof(YourDataTypeCollection));
    // to export data
    using (FileStream fs = File.Create("YourFile.xml"))
    {
        xser.Serialize(fs, data);
    }
    // to import data
    using (FileStream fs = File.Open("YourFile.xml", FileMode.Open))
    {
        data = (YourDataTypeCollection)xser.Deserialize(fs);
    }
    string value1 = data["key"].Value1;