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 スキーマで辞書を表現する良い方法はありません。あなたができる最善のことは、一意のキーがあることを示すことです

しかし、回避策が必要な場合は、私が試したこのコードを試すことができます。非常にうまく機能します。手動で行うべきことの1つは、キーが常に一意であることを確認することです。このようなことを試してください

 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 に答える