Pergunta

Estou usando o .Net 2 e a maneira normal de armazenar minhas configurações.Eu armazeno meu objeto personalizado serializado em xml.Estou tentando recuperar o valor padrão da propriedade (mas sem redefinir outras propriedades).Eu uso:

ValuationInput valuationInput = (ValuationInput) Settings.Default.Properties["ValuationInput"].DefaultValue;

Mas parece retornar uma string em vez de ValuationInput e gera uma exceção.

Fiz um hack rápido, que funciona bem:

string valuationInputStr = (string) 
Settings.Default.Properties["ValuationInput"].DefaultValue;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ValuationInput));
ValuationInput valuationInput = (ValuationInput) xmlSerializer.Deserialize(new StringReader(valuationInputStr));

Mas isso é realmente feio - quando uso toda a ferramenta para definir uma configuração fortemente digitada, não quero serializar o valor padrão sozinho, gostaria de lê-lo da mesma forma que leio o valor atual: ValuationInput valuationInput = Settings.Default.ValuationInput;

Foi útil?

Solução

Em algum momento, algo, em algum lugar, terá que usar a desserialização Xml, seja você ou um wrapper dentro da classe de configurações.Você sempre pode abstraí-lo em um método para remover o código "feio" da sua lógica de negócios.

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

Outras dicas

@Grzenio,

Por que você não usa seu tipo de objeto diretamente?Você pode definir o tipo de sua configuração na guia Propriedades do projeto-> Configurações.Você pode selecionar seu tipo clicando em Navegar no menu suspenso da coluna Tipo.

Citação do MSDN:

As configurações de aplicativos podem ser armazenadas como qualquer tipo de dados que seja serializável XML ou possui um TypeConverter que implementa a ToString/FromString

Dessa forma, você pode ter configurações fortemente digitadas, ou seja,(ValuationInput) Configurações.Default.Properties["ValuationInput"].DefaultValue;retornará um objeto em vez de string.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top