[解決済み] Dictionary メンバを含むクラスをシリアライズする
質問
を拡大解釈する 以前の問題 そして、設定ファイルクラスを(デ)シリアライズすることにしたのですが、これがとてもうまくいきました。
現在、マップするドライブ文字(キーはドライブ文字、値はネットワークパス)の連想配列を格納したいのですが、そのために
Dictionary
,
HybridDictionary
および
Hashtable
を呼び出すと、次のようなエラーが発生します。
ConfigFile.Load()
または
ConfigFile.Save()
:
を反映したエラーが発生しました。 'App.ConfigFile'です。[snip]です。 System.NotSupportedException: できません シリアライズメンバー App.Configfile.mappedDrives [snip]です。
ディクショナリとハッシュテーブルはシリアライズできるようですが、何が間違っているのでしょうか?
[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 drvLetter, string path)
{
this.mappedDrives.Add(drvLetter, path);
}
public static ConfigFile Load(string filename)
{
using (var filestream = File.Open(filename, FileMode.Open, FileAccess.Read))
{
try
{
var serializer = new XmlSerializer(typeof(ConfigFile));
return (ConfigFile)serializer.Deserialize(filestream);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + ex.ToString());
return new ConfigFile();
}
}
}
}
解決方法は?
IDictionaryを実装しているクラスはシリアライズできません。これをチェックアウト リンク .
Q: なぜハッシュテーブルのシリアライズができないのですか?
A: XmlSerializer は、以下の処理を行うことができません。 を実装するクラスは、IDictionary インターフェイスを使用します。これは スケジュールの制約と ハッシュテーブルがないこと はXSDの型に対応するものがあります。 システムです。唯一の解決策は を使用しないカスタムハッシュテーブルを実装します。 IDictionaryを実装しない インターフェイスを使用します。
ですから、このために独自のバージョンのDictionaryを作成する必要があると思います。これをチェック その他の質問 .
関連
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] 辞書から要素を削除する
-
[解決済み] 2つのリストを辞書に変換するにはどうしたらいいですか?
-
[解決済み] C#でHashtableよりDictionaryが好まれる理由とは?
-
[解決済み] リスト内包型辞書の作成
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】C#で四捨五入する方法
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み] 関数を終了するには?