Pregunta

Estoy usando .Net 2 y la forma normal de almacenar mi configuración.Almaceno mi objeto personalizado serializado en xml.Estoy intentando recuperar el valor predeterminado de la propiedad (pero sin restablecer otras propiedades).Yo suelo:

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

Pero parece devolver una cadena en lugar de ValuationInput y genera una excepción.

Hice un truco rápido, que funciona bien:

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

Pero esto es realmente feo: cuando uso todas las herramientas para definir una configuración fuertemente tipada, no quiero serializar el valor predeterminado, me gustaría leerlo de la misma manera que leo el valor actual: ValuationInput valuationInput = Settings.Default.ValuationInput;

¿Fue útil?

Solución

En algún momento, algo, en algún lugar, tendrá que usar la deserialización Xml, ya sea usted o un contenedor dentro de la clase de configuración.Siempre puedes abstraerlo en un método para eliminar el código "feo" de tu lógica empresarial.

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

Otros consejos

@Grzenio,

¿Por qué no utilizas tu tipo de objeto directamente?Puede establecer el tipo de configuración en Propiedades del proyecto->pestaña Configuración.Puede seleccionar su tipo haciendo clic en Examinar en el menú desplegable de la columna Tipo.

Cita de MSDN:

La configuración de la aplicación se puede almacenar como cualquier tipo de datos que sea serializable XML o tiene un typeconverter que implementa tostring/fromtring

De esa manera puede tener configuraciones fuertemente tipadas, es decir.(ValuationInput) Configuración.Default.Properties["ValuationInput"].DefaultValue;devolverá un objeto en lugar de una cadena.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top