0

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

4

2 回答 2

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

于 2008-09-09T12:29:14.303 回答
2

@Grzenio,

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

来自 MSDN 的引用:

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

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

于 2008-09-09T12:45:14.327 回答