使用 Properties.Settings.Default 的属性默认值
题
我正在使用 .Net 2 和正常的方式来存储我的设置。我将自定义对象序列化为 xml 存储。我正在尝试检索属性的默认值(但不重置其他属性)。我用:
ValuationInput valuationInput = (ValuationInput) Settings.Default.Properties["ValuationInput"].DefaultValue;
但它似乎返回一个字符串而不是 ValuationInput 并且引发异常。
我做了一个快速破解,效果很好:
string valuationInputStr = (string)
Settings.Default.Properties["ValuationInput"].DefaultValue;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ValuationInput));
ValuationInput valuationInput = (ValuationInput) xmlSerializer.Deserialize(new StringReader(valuationInputStr));
但这真的很难看 - 当我使用所有工具来定义强类型设置时,我不想自己序列化默认值,我想以与读取当前值相同的方式读取它: ValuationInput valuationInput = Settings.Default.ValuationInput;
解决方案
在某些时候、某些事物、某个地方将不得不使用 Xml 反序列化,无论是您还是设置类中的包装器。您始终可以用一种方法将其抽象出来,以从业务逻辑中删除“丑陋”的代码。
public static T FromXml<T>(string xml)
{
XmlSerializer xmlser = new XmlSerializer(typeof(T));
using (System.IO.StringReader sr = new System.IO.StringReader(xml))
{
return (T)xmlser.Deserialize(sr);
}
}
http://www.vonsharp.net/PutDownTheXmlNodeAndStepAwayFromTheStringBuilder.aspx
其他提示
@Grzenio,
为什么不直接使用对象类型呢?您可以在“项目属性”->“设置”选项卡上设置设置类型。您可以通过单击“类型”列下拉列表中的“浏览”来选择类型。
引用自MSDN:
应用程序设置可以存储为XML序列化的任何数据类型,也可以具有实现ToString/从String实现的键换器
这样你就可以拥有强类型设置,即(ValuationInput)Settings.Default.Properties[“ValuationInput”].DefaultValue;将返回一个对象而不是字符串。
不隶属于 StackOverflow