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

时间:2008-09-09 12:10:28

标签: c# .net settings

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

2 个答案:

答案 0 :(得分:2)

在某些时候,某些东西,某个地方将不得不使用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

答案 1 :(得分:2)

@Grzenio,

为什么不直接使用对象类型?您可以在“项目属性” - >“设置”选项卡上设置设置类型。您可以通过单击“类型”列中的“向下浏览”选择您的类型。

来自MSDN的引文:

  

应用程序设置可以存储为   任何XML可序列化的数据类型   或者有一个实现的TypeConverter   的ToString / FromString

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