【问题标题】:Property default values using Properties.Settings.Default使用 Properties.Settings.Default 的属性默认值
【发布时间】:2008-09-09 12:10:27
【问题描述】:

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

【问题讨论】:

    标签: c# .net settings


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      @Grzenio,

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

      来自 MSDN 的引用:

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

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

      【讨论】:

        猜你喜欢
        • 2011-12-01
        • 1970-01-01
        • 2023-03-18
        • 2011-12-16
        • 2012-06-30
        • 2021-08-11
        • 1970-01-01
        • 2010-10-16
        • 2011-02-05
        相关资源
        最近更新 更多