使用Properties.Settings.Default的属性默认值

时间:2020-03-05 18:50:00  来源:igfitidea点击:

我正在使用.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));

但是,当我使用所有工具定义强类型设置时,这真的很丑陋,我不想自己序列化默认值,我想像读取当前值一样读取它: 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的引用:

Application settings can be stored as
  any data type that is XML serializable
  or has a TypeConverter that implements
  ToString/FromString

这样,我们就可以具有强类型设置,即(ValuationInput)Settings.Default.Properties [" ValuationInput"]。DefaultValue;将返回一个对象而不是字符串。