3

.Net ConfigurationManagerを使用して文字列を保存できますが、構造化データを保存するにはどうすればよいですか?

たとえば、私はこれを行うことができます:

conf = ConfigurationManager.OpenExeConfiguration(...)
string s = "myval";
conf.AppSettings.Settings["mykey"].Value = s;
conf.Save(ConfigurationSaveMode.Modified);

そして私はこれをしたいと思います:

class myclass {
   public string s;
   int i;
   ... more elements
};

myclass c = new myclass(); c.s = "mystring"; c.i = 1234; ...

conf.AppSettings.Settings["mykey"] = cc;
conf.Save(ConfigurationSaveMode.Modified);

ConfigurationManagerを使用して構造化データを保存および取得するにはどうすればよいですか?

@sllが提案したようにソリューションを実装しました。しかし、その場合、構成に新しいセクションを作成するのが困難でした。これを行う 方法は次のとおりです。ConfigurationManagerを介してUser.Configファイルに書き込む方法は?

4

2 に答える 2

2

ConfigurationSectionクラスから継承して独自の構成セクションタイプを作成し、それを使用してカスタムタイプ情報を保存/ロードできます。

MSDN:方法:ConfigurationSectionを使用してカスタム構成セクションを作成する

ところで、あなたや他の人に役立つかもしれない1つのアドバイス:1つの良いことは、カスタム構成セクションクラスを不変(パブリックセッターなし)にして、アプリケーションライフサイクルのどの段階でも構成を変更できないようにすることです。構成セクションクラスに依存し、セッターがないためにプロパティ値を設定する能力に固執する可能性のあるいくつかのテスト値を持つセクションスタブが必要なコードの単体テストを作成することを決定します。解決策は、セクションクラスから継承される新しいクラスを提供し、以下に示すように保護されたインデクサーを使用してコンストラクター値を指定することです。

public class TestSectionClass: MyConfigurationSection
{
    public TestSectionClass(string testUserName)
    {
        this["userName"] = testUserName;
    }
}
于 2013-03-13T10:43:07.540 に答える
1

シリアル化

データをシリアル化する方法は多数あるため、いずれかを選択する必要があります。しかし、.NETは非常に多くの場合に適したシリアル化APIを提供し、最近Web AJAX呼び出しを操作JavaScriptSerializerする際に、物事をJSONに変換するために頻繁に使用していることに気付きました。ただし、 protobuf-netなどのサードパーティライブラリがあります。

ここで重要なのは、基本的にデータをバイトまたは文字列表現に変換し、後で逆シリアル化して元の構造に戻すことができるようにすることです。これにより、構成ファイルやネットワーク経由の送信など、その間のメディアにデータを保存できます。等

@sllの回答によると、.NETには別の側面があり、カスタム構成セクションの内外でデータのシリアル化を処理できることを意味します。この目的のために型を明示的に指定し始めるかどうかはあなたの呼び出しです。結論は同じです、どういうわけかシリアル化します。

于 2013-03-13T10:42:57.080 に答える