Форум программистов, компьютерный форум, киберфорум
.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Comanche
1

Десериализация и DefaultValueAttribute

18.06.2012, 17:10. Показов 2965. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Допустим, имею класс с двумя свойствами:

<DefaultValueAttribute(5)> _
Public Property IntProp() As Integer
Get
IntProp = c_IntProp
End Get
Set(ByVal value As Integer)
c_IntProp = value
End Set
End Property

<DefaultValueAttribute("Вася")> _
Public Property StrProp() As String
Get
StrProp = c_StrProp
End Get
Set(ByVal value As String)
c_StrProp = value
End Set
End Property
Как видите, у каждого из свойств установлено дефолтное значение. Поэтому, когда я сериализую (через XmlSerializer и FileStream) экземпляр этого класса, то в итоговый XML-файл попадают только те свойства, значения которых [bold]отличаются[/bold] от дефолтных. Например, если IntProp = 123 (не равно 5), а StrProp = "Вася" (совпадает с дефолтом), то XML будет выглядеть так:

<?xml version="1.0"?>
<TestClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema
<IntProp>123</IntProp>
</TestClass>
т.е. StrProp в него не попадает. Что ж, так и задумано.

Однако, когда я выполняю [underline]десериализацию[/underline] из этого XML-файла, то StrProp получит пустое значение, - если только в конструкторе класса нет явной инициализации свойства StrProp в строку "Вася". Получается, что дефолтные значения нужно указывать в ДВУХ местах: в атрибутах [bold]DefaultValueAttribute[/bold] и в коде конструктора. С одной стороны, это логично: атрибуты - это [bold]метаданные[/bold], а конструктор - это [bold]код[/bold]. Но с другой стороны, очень хоцца сказать конструктору: [italic]"А ну-ка возьми-ка начальные значения всех членов класса из метаданных! чтоб мне любимому дважды не писАть!"...[/italic] вопрос в том, КАК это сделать? как заставить конструктор проинициализировать экземплярные члены класса значениями из соотв. атрибутов [bold]DefaultValueAttribute[/bold]?!
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2012, 17:10
Ответы с готовыми решениями:

Десериализация
Предположим, создал класс public class OrderedItem1 { public string Name; ...

Десериализация
Что происходит с полями, помеченными как transien? Они восстанавливаются при десериализации со...

Десериализация
Ниженаписанный код программы выводит на экран: 14 16 -2 11 11 Объясните,пожалуйста, от куда...

Десериализация
Всем привет, друзья, я уже в отчаянии, 4 дня пытаюсь десериализировать json-ответ от вк, но просто...

1
Comanche
18.06.2012, 17:51 2
Хм... похоже, не я один этим вопросом задавался:
на странице http://support.microsoft.com/kb/311339/en-us сказано:

[bold]MSDN documentation for the DefaultValueAttribute class may be confusing.[/bold]
...
...
However, the DefaultValue attribute does not cause the initial value to be initialized with the attribute's value.
Иными словами, нужно явно задавать дефолты в ДВУХ местах - и в атрибуте, и в конструкторе. Вот так. Причём в конструкторе можно читать прямо из метаданных:
http://msdn.microsoft.com/libr... ibutes.asp
(статья "[bold]Retrieving Information Stored in Attributes[/bold]").

Сам спросил - сам ответил
18.06.2012, 17:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2012, 17:51
Помогаю со студенческими работами здесь

Десериализация
Всем привет. Помогите разобраться. Я сериализую лист в xml. После этого я десериализую его и...

Десериализация JSON
Как для такого формата класс создать? , , ] исп. Newtonsoft.Json var myclass =...

Десериализация XML
Здравствуйте! Добавлено через 27 секунд Решил(

Json, десериализация
Здравствуйте, помогите пожалуйста. Пытаюсь десериализовать Json (использую...

Сериализация и десериализация
Приветы! Есть клиент-серверное приложение (я подумал, что так будет удобнее всего работать) и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru