1

У меня есть следующие типы.Net Настройки, сложные типы и сериализации

[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> 

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

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

+0

Я уже знаю ответ, но прихожу за очками, если вы хотите :-) –

ответ

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

  2. Я думаю, вы должны удалить атрибут XmlType для решения этой проблемы.

  3. Укажите пространство имен, но в XML-файле их нет? Это тоже должно соответствовать.

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

+1

Эти вопросы не решают проблему, действительно, проблема заключается в том, что VS вводит значение «по умолчанию» внутри параметра Settings.designer. cs файл. Но спасибо за рекомендации в любом случае ... –

0

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

Смежные вопросы