2

何らかの理由で、クラスの配列を設定に保存できないようです。コードは次のとおりです。

            var newLink = new Link();
            Properties.Settings.Default.Links = new ArrayList();
            Properties.Settings.Default.Links.Add(newLink);
            Properties.Settings.Default.Save();

私の Settings.Designer.cs では、フィールドを配列リストに指定しました。

    [global::System.Configuration.UserScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public global::System.Collections.ArrayList Links {
        get {
            return ((global::System.Collections.ArrayList)(this["Links"]));
        }
        set {
            this["Links"] = value;
        }
    }

何らかの理由で、Link クラスがシリアル化可能であり、テストしたにもかかわらず、データが保存されません。

4

2 に答える 2

3

問題の原因を見つけました。単純な配列を使用するだけではうまくいきません。それについて考えた後、デシリアライザーは、配列項目をどの型にデシリアライズするかを知りません。配列に厳密な型指定が必要であることを確認できませんでした。デザイナーは、それが単純なジェネリック配列であると愚かにも信じさせました。

    [global::System.Configuration.UserScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public List<Link> Links
    {
        get {
            return ((List<Link>)(this["Links"]));
        }
        set {
            this["Links"] = value;
        }
    }

デザイナーからではなく、Settings.Designer.cs でこれらの変更を行う必要がありました。

于 2010-05-05T02:42:17.600 に答える
1

Link クラスが正しく XML シリアル化可能であること、または文字列への型コンバーターがあることを確認してください (これは application.settings ファイルを使用する場合に推奨されます)。

あなたの型の何かが XML シリアル化形式に変換されないと思います。そして、あなたの user.config は、利用可能な文字列型コンバーターがないことを示しています。

于 2010-05-04T00:26:00.460 に答える