C# 序列化.NET 2.0中的私有支持数据成员?

C# 序列化.NET 2.0中的私有支持数据成员?,c#,xml,serialization,.net-2.0,private-members,C#,Xml,Serialization,.net 2.0,Private Members,我正在编写一个小的xml配置文件,它将从特定位置保存和加载(因此不使用user.config)。我的应用程序是.NET 2.0,无法移动到较新版本(因此没有DataContractSerializer),我需要实现“保存密码”选项,以便用户使用应用程序时预先填写密码字段 现在我是这样做的 public class UserSettings { //Snip many other properties... public bool SavePassword { get; set;

我正在编写一个小的xml配置文件,它将从特定位置保存和加载(因此不使用
user.config
)。我的应用程序是.NET 2.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
不公开,但是如果我将其设置为除public
xSer之外的任何其他值,Serialize(fs,this)
将不包括该属性。我需要做什么才能使它正常工作


我知道还有很多其他类似的问题,但是没有一个有.NET2.0的要求,并且使用的解决方案对一个限制在2.0的人来说是不可用的。除了编写自定义的
xmlsarlizer
或接受
ProtectedPassword
是公共的这一事实之外,还有其他选择吗。

据我所知,在.NET 2.0中实现这一点的唯一方法是编写的自定义实现


也就是说,如果配置文件不需要可读/可编辑,我建议使用来执行二进制序列化,这将捕获私有成员。

对于BinaryFormatter,我使用什么来代替
[XmlIgnore]
?@ScottChamberlain查看非序列化属性: