0

Serialize Dictionary Collection が必要ですが、コードにエラーがあります。どこが間違っていたのですか?これは私のコードです。

Dictionary<country,string> Countries=new Dictionary<country,string>();

Countries.Add(new country() { code = "AF", iso = 4 }, "Afghanistan");
Countries.Add(new country() { code = "AL", iso = 8 }, "Albania");
Countries.Add(new country() { code = "DZ", iso = 12 }, "Algeria");
Countries.Add(new country() { code = "AD", iso = 20 }, "Andorra");

FileStream fs = new FileStream("John1.xml", FileMode.Create);
XmlSerializer xs = new XmlSerializer(typeof(Dictionary<country, string>));
xs.Serialize(fs, Countries);

クラスの国

public class country
{
    public string code { get; set; }
    public int iso { get; set; }
}
4

2 に答える 2

1

XmlSerializer は辞書をシリアル化できませんが、辞書を KeyValue ペアのリストに変換してシリアル化することはできます。

Dictionary<country,string> Countries=new Dictionary<country,string>();

Countries.Add(new country() { code = "AF", iso = 4 }, "Afghanistan");
Countries.Add(new country() { code = "AL", iso = 8 }, "Albania");
Countries.Add(new country() { code = "DZ", iso = 12 }, "Algeria");
Countries.Add(new country() { code = "AD", iso = 20 }, "Andorra");

FileStream fs = new FileStream("John1.xml", FileMode.Create);
XmlSerializer xs = new XmlSerializer(typeof(List<KeyValuePair<country, string>>));
xs.Serialize(fs, Countries.Select(x=>new KeyValuePair<country,string>(){ Key = x.Key, Value = x.Value}).ToList());

編集:考慮すべきもう1つのこと:System.Collections.Generic.KeyValuePairフレームワークによって提供される構造体はシリアル化できないため、使用できません(キーおよび値のプロパティは読み取り専用としてマークされています)。独自の KeyValue 構造体を作成する必要があります。

[Serializable]
public struct KeyValuePair<K, V>
{
  public K Key { get; set; }    
  public V Value  { get; set; }
}
于 2013-10-15T12:36:57.680 に答える
0

オプションで行けDataContractSerializerます。.NET ディクショナリをシリアル化できます

方法: DataContractSerializer を使用してシリアル化する

于 2013-10-15T12:32:25.380 に答える