Значения свойств по умолчанию с использованием Properties.Settings.Default

StackOverflow https://stackoverflow.com/questions/51700

  •  09-06-2019
  •  | 
  •  

Вопрос

Я использую .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;

Это было полезно?

Решение

В какой-то момент кому-то и где-то придется использовать десериализацию 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

Другие советы

@Грзенио,

Почему бы вам не использовать свой тип объекта напрямую?Вы можете установить тип настройки на вкладке «Свойства проекта» -> «Настройки».Вы можете выбрать свой тип, нажав кнопку «Обзор» в раскрывающемся списке столбца «Тип».

Цитата из MSDN:

Настройки приложения могут быть сохранены как любой тип данных, который является сериализуемой XML, или имеет типконвертер, который реализует ToString/FromString

Таким образом, вы можете иметь строго типизированные настройки, т.е.(ValuationInput) Settings.Default.Properties["ValuationInput"].DefaultValue;вернет объект вместо строки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top