0

我有一本看起来像这样的字典

public Dictionary<string,List<ForwardBarrelRecord>> lexicon = new Dictionary<string, List<ForwardBarrelRecord>>();

ForwardBarrelRecord看起来像这样

public struct ForwardBarrelRecord
{
    public string DocId;
    public int hits { get; set; }
    public List<int> hitLocation;
}

我想将所有内容都写到文件的正向桶记录中的 int 列表中。这样当我检索它时,我可以对字典进行精确的重建。

到目前为止,我已经编写了代码,但它只将键保存在字典中,而不是复制值,只写类路径。到目前为止我的代码是

using (var file = new System.IO.StreamWriter("myfile.txt"))
        {
            foreach (var entry in pro.lexicon)
            {
                file.WriteLine("[{0} {1}]", entry.Key, entry.Value);
            }
        }

我希望对我的这本词典中的所有内容进行深度复制。

任何帮助,将不胜感激。

4

1 回答 1

1

如此链接中所述, 为什么.NET 中没有可序列化 XML 的字典?

XML 序列化的问题在于它不仅仅是创建字节流。它还涉及创建一个 XML 模式,该字节流将对其进行验证。XML Schema 中没有表示字典的好方法。你能做的最好的就是证明有一个唯一的钥匙

但是如果你想要一个工作区,你可以试试我试过的这段代码,它工作得很好,你应该手动做的一件事是检查密钥是否总是唯一的,试试这样

 class Program
{        
    static void Main(string[] args)
    {

        List<KeyValuePair<string,List<ForwardBarrelRecord>>>  lexicon   = new List<KeyValuePair<string,List<ForwardBarrelRecord>>>();  
        ForwardBarrelRecord FBR = new ForwardBarrelRecord();  
        FBR.DocId ="12"; 
        FBR.hits= 14;  
        FBR.hitLocation = new List<int>(){12,13,114};
        var lst = new List<ForwardBarrelRecord>() { FBR, FBR };
        KeyValuePair<string,List<ForwardBarrelRecord>> t= new KeyValuePair<string,List<ForwardBarrelRecord>>("Test",lst);
        lexicon.Add(t);            
        XmlSerializer serializer = new XmlSerializer(typeof(List<KeyValuePair<string, List<ForwardBarrelRecord>>>));
        string  fileName= @"D:\test\test.xml";
        Stream stream = new FileStream(fileName,FileMode.Create);
        serializer.Serialize(stream,lexicon);
        stream.Close();            
    }     
}

public struct ForwardBarrelRecord
{
    [XmlElement]
    public string DocId;
    [XmlElement]
    public int hits { get; set; }
    [XmlElement]
    public List<int> hitLocation;
}

但如果你想要一个更强大的解决方案,你可以使用这个自定义的 SortedDictionary http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx

希望这有帮助

于 2013-10-19T21:10:33.873 回答