Файл настроек .Net, сложные типы и сериализация - PullRequest
1 голос
/ 27 августа 2010

У меня есть следующие типы

[Serializable, XmlType(Namespace="http://mycompany/foo"]
public sealed class Limit
{
    [XmlElement(ElementName="Value1")]
    public double Value1 {get;set;}

    [XmlElement(ElementName="ComplexValue1")]
    public ComplexValue ComplexValue1 {get;set;}
}

[Serializable, XmlType(Namespace="http://mycompany/foo"]
public sealed class ComplexValue 
{
    [XmlElement(ElementName="Item1")]
    public double Item1 {get;set;}

    [XmlElement(ElementName="Item2")]
    public double Item2 {get;set;}
}

, которые я хочу сериализовать в файл .settings.

Когда я копирую блоб ниже в файл настроек, я теряю элемент ComplexValue1каким-то образом:

<?xml version="1.0" encoding="utf-16"?>
<Limit>
  <Value1>20</Value1>
  <ComplexValue1>
     <Item1>2.0</Item1>
     <Item2>5.0</Item2>
  </ComplexValue1>
</Limit>

т.е. Visual Studio преобразует его в:

<?xml version="1.0" encoding="utf-16"?>
<Limit>
<Value1>20</Value1>
</Limit>

с кучей пространств имен, которые, я думаю, не имеют значения для вопроса ...

Чего мне не хватает?

Ответы [ 2 ]

2 голосов
/ 27 августа 2010
  1. Вам не нужен атрибут Serializable для сериализации XML

  2. Полагаю, вам следует удалить атрибут XmlType, чтобы решить проблему.

  3. Вы указываете пространство имен, но в XML-файле его нет?Это также должно соответствовать.

  4. Используйте XmlRoot для корневого узла, если вам нравится

0 голосов
/ 13 апреля 2011

Генерация кода для значения по умолчанию может быть отключена для каждой настройки в конструкторе настроек.Просто установите для GenerateDefaultValueInCode значение false в окне свойств для тех параметров, которые в этом не нуждаются.

...