c# – 在.NET 2.0中序列化私有后备数据成员?
发布时间:2020-12-15 17:27:59 所属栏目:百科 来源:网络整理
导读:我正在编写一个小的xml配置文件,该文件将从特定位置保存和加载(因此不使用user.config).我的应用程序是.NET 2.0,无法移动到更新版本(因此没有DataContractSerializer)我需要实现“保存密码”选项,以便在用户使用应用程序时预先填写密码字段. 目前我就是这样
我正在编写一个小的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),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是公共的这一事实之外,还有其他选择吗? 解决方法
据我所知,在.NET 2.0中完成此操作的唯一方法是编写
IXmlSerializable 的自定义实现.
也就是说,如果配置文件不需要是人类可读/可编辑的,我建议使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |