相关疑难解决方法(0)

Serialize包含Dictionary成员的Class

扩展我之前的问题,我决定(de)序列化我的配置文件类,它运行得很好.

我现在想存储驱动器盘符映射关联数组(关键是驱动器号,值是网络路径)和使用都试过Dictionary,HybridDictionaryHashtable打电话时的这一点,但我总是得到下面的错误ConfigFile.Load()或者ConfigFile.Save():

反映类型'App.ConfigFile'时出错.[snip] System.NotSupportedException:无法序列化成员App.Configfile.mappedDrives [snip]

从我读过的词典和HashTables可以被序列化,所以我做错了什么?

[XmlRoot(ElementName="Config")]
public class ConfigFile
{
    public String guiPath { get; set; }
    public string configPath { get; set; }
    public Dictionary<string, string> mappedDrives = new Dictionary<string, string>();

    public Boolean Save(String filename)
    {
        using(var filestream = File.Open(filename, FileMode.OpenOrCreate,FileAccess.ReadWrite))
        {
            try
            {
                var serializer = new XmlSerializer(typeof(ConfigFile));
                serializer.Serialize(filestream, this);
                return true;
            } catch(Exception e) {
                MessageBox.Show(e.Message);
                return false;
            }
        }
    }

    public void addDrive(string …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization dictionary

135
推荐指数
7
解决办法
15万
查看次数

.NET XML序列化陷入困境?

在进行我认为我要分享的C#XML序列化时,我遇到了一些问题:


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

[XmlRoot("dictionary")]
public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
{      
    public System.Xml.Schema.XmlSchema GetSchema()
    {
        return null;
    }

    public void ReadXml(System.Xml.XmlReader reader)
    {
        XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
        XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));

        bool wasEmpty = reader.IsEmptyElement;
        reader.Read();

        if (wasEmpty)
            return;

        while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
        {
            reader.ReadStartElement("item");

            reader.ReadStartElement("key");
            TKey key = (TKey)keySerializer.Deserialize(reader);
            reader.ReadEndElement();

            reader.ReadStartElement("value");
            TValue value = (TValue)valueSerializer.Deserialize(reader);
            reader.ReadEndElement();

            this.Add(key, value);

            reader.ReadEndElement();
            reader.MoveToContent();
        }
        reader.ReadEndElement();
    }

    public void …
Run Code Online (Sandbox Code Playgroud)

c# xml-serialization

120
推荐指数
10
解决办法
7万
查看次数

c#中基于文件系统的B + Tree实现

在c#(开源)中是否存在基于文件系统的B + Tree实现.我找到了一些项目,但那些不是基于文件(磁盘)的实现.我特意寻找基于文件系统的B + Trees.

c# b-tree

9
推荐指数
1
解决办法
8263
查看次数

使用Dictionary的Protobuf-net对象引用反序列化:引用跟踪对象在反序列化期间更改了引用

我在尝试使用protobuf-net序列化/反序列化复杂对象图时遇到了一些问题.

我正在研究遗留应用程序,我们正在使用.Net Remoting将GUI客户端连接到C#服务.由于使用默认值的对象图的序列化大小,我们看到海外用户的性能不佳BinaryFormatter,客户端和服务器之间的有限带宽(1Mbit/s)加剧了这种情况.

作为一个快速的胜利,我想我已经汇总了一个概念证明,通过实施,使用protobuf-net代替是否有任何性能提升ISerializable.在测试时,我遇到了一个问题,即没有维护对象引用.

我汇总了一个重新解决问题的例子.我期待Dictionary(Items [1])和对象BA中的对象与我AsReference=trueProtoMember属性中指定的对象相同 .

使用protobuf-net 2.0.0.619,我看到反序列化时引发的异常(反序列化过程中引用跟踪对象更改了引用).

如果这不是支持的方案,请告诉我.

测试

[Test]
public void AreObjectReferencesSameAfterDeserialization()
{
    A a = new A();
    B b = new B();

    b.A = a;

    b.Items.Add(1, a);

    Assert.AreSame(a, b.A);
    Assert.AreSame(b.A, b.Items[1]);

    B deserializedB;

    using (var stream = new MemoryStream())
    {
        Serializer.Serialize(stream, b);
        stream.Seek(0, SeekOrigin.Begin);
        deserializedB = Serializer.Deserialize<B>(stream);
    }

    Assert.AreSame(deserializedB.A, deserializedB.Items[1]);
}
Run Code Online (Sandbox Code Playgroud)

类定义

[Serializable]
[ProtoContract]
public class A
{
}

[Serializable]
[ProtoContract]
public class B …
Run Code Online (Sandbox Code Playgroud)

c# serialization protobuf-net

9
推荐指数
1
解决办法
3732
查看次数