4

特定の場所から保存およびロードされる小さなxml構成ファイルを作成しています(したがって、を使用していませんuser.config)。私のアプリケーションは.NET2.0であり、新しいバージョンに移動できません(したがって、ありませんDataContractSerializer)。ユーザーがアプリを使用するときにパスワードフィールドが事前に入力されるように、[パスワードの保存]オプションを実装する必要があります。

現在、これが私のやり方です

public class UserSettings
{
    //Snip many other properties...

    public bool SavePassword { get; set; }

    [XmlIgnore]
    public string Password
    {
        get
        {
            string retVal = string.Empty;
            if (ProtectedPassword != null)
            {
                try
                {
                    retVal = Encoding.UTF8.GetString(ProtectedData.Unprotect(ProtectedPassword, _md5.ComputeHash(Encoding.UTF8.GetBytes(this.Username.ToUpper())), DataProtectionScope.LocalMachine));
                }
                catch
                {
                    retVal = string.Empty;
                }
            }
            return retVal;
        }
        set
        {
            ProtectedPassword = ProtectedData.Protect(Encoding.UTF8.GetBytes(value), _md5.ComputeHash(Encoding.UTF8.GetBytes(this.Username.ToUpper())), DataProtectionScope.LocalMachine);
        }
    }

    public byte[] ProtectedPassword;

    private readonly MD5 _md5 = MD5.Create();


    public void Save()
    {
        var xOver = new XmlAttributeOverrides();

        //If Save password is false do not store the encrypted password
        if (this.SavePassword == false)
        {
            var xAttrs = new XmlAttributes();
            xAttrs.XmlIgnore = true;
            xOver.Add(typeof(UserSettings), "ProtectedPassword", xAttrs);
        }

        XmlSerializer xSer = new XmlSerializer(typeof(UserSettings), xOver);
        Directory.CreateDirectory(Path.GetDirectoryName(savePath));
        using(var fs = new FileStream(savePath, FileMode.Create))
        {
            xSer.Serialize(fs, this);
        }

    }

非公開にしたいProtectedPasswordのですが、公開以外に設定した場合xSer.Serialize(fs, this)、物件は含まれません。これを正しく機能させるには何をする必要がありますか?

これに似た質問が他にもたくさんあることは知っていますが、.NET 2.0の要件がなく、2.0に制限されている人が利用できないソリューションを使用しているものはありません。習慣を書くか、公XMLSerarlizerになっているという事実を持って生きる以外の選択肢はありますか?ProtectedPassword

4

1 に答える 1

2

私の知る限り、.NET 2.0でこれを行う唯一の方法は、のカスタム実装を作成することですIXmlSerializable

とはいえ、構成ファイルが人間が読み取れる/編集できる必要がない場合は、を使用しBinaryFormatterてバイナリシリアル化を実行することをお勧めします。これにより、プライベートメンバーがキャプチャされます。

于 2012-07-31T20:45:14.433 に答える