' кусок класса который сериализуется
Public Class DBody
' .....................
<System.Xml.Serialization.XmlElementAttribute("IndTaxNum", _
Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, _
IsNullable:=True)> _
Public IndTaxNum() As IndTaxNumColumn
'.....................
End Class
' объявление типа
Public Class IndTaxNumColumn
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public ROWNUM As Integer
<System.Xml.Serialization.XmlTextAttribute()> _
Public Value As String
End Class
элемент Xml с Xsi:nil="true"
Работаю в VS2003 — VB.Net.
Столкнулся с такой проблемой: При сериализации класса не могу присвоить в элементе XML документа
одному атрибуту значение null , а другому некоторое значение.
Сериализуемый класс
Код:
в документ передается массив объектов IndTaxNumColumn, при этом не все значения Value заполняются.
Код:
<IndTaxNum ROWNUM="1" xsi:nil="true" />
<IndTaxNum ROWNUM="2">345453<IndTaxNum/>
<IndTaxNum ROWNUM="3" xsi:nil="true" />
<IndTaxNum ROWNUM="4">767567<IndTaxNum/>
.................
<IndTaxNum ROWNUM="2">345453<IndTaxNum/>
<IndTaxNum ROWNUM="3" xsi:nil="true" />
<IndTaxNum ROWNUM="4">767567<IndTaxNum/>
.................
Однако, если задавать
Код:
Value = System.DBNull.Value.ToString
создается —
Код:
<IndTaxNum ROWNUM="1" />
если не передавать значение IndTaxNumColumn в массив, то
Код:
<IndTaxNum xsi:nil="true" />
Ни тот, ни другой вариант не подходят.
Как можно присвоить null переменной Value, и оставить значение ROWNUM? и Добится такого результата
Код:
<IndTaxNum ROWNUM="1" xsi:nil="true" />
Заранее спасибо!
Вот так что-ли: Value="null". Хорошо, но тогда XML-парсер как поймёт что ты имел в виду, строку "null" или значение null. Рекомендую вместо null в в Value писать String.Empty. Атрибуты, значения которых равны null не выводятся в XML.
Цитата: 3A3-968M
А как ты представляешь себе запись null в значение атрибута??
Вот так что-ли: Value="null". Хорошо, но тогда XML-парсер как поймёт что ты имел в виду, строку "null" или значение null. Рекомендую вместо null в в Value писать String.Empty. Атрибуты, значения которых равны null не выводятся в XML.
Вот так что-ли: Value="null". Хорошо, но тогда XML-парсер как поймёт что ты имел в виду, строку "null" или значение null. Рекомендую вместо null в в Value писать String.Empty. Атрибуты, значения которых равны null не выводятся в XML.
Попробовал 4 варианта :
- System.DBNull.Value.ToString
- Nothing
- String.Empty
результат:Код:<IndTaxNum ROWNUM="1" /> - не передавать значение
результат:Код:<IndTaxNum xsi:nil="true" />
А нужно вот так:
Код:
<IndTaxNum ROWNUM="1" xsi:nil="true" />
иначе проверка по схеме не проходит!
Почему бы тогда не представлять оба поля класса как XmlAttribute, а то у тебя Value как XmlTextAttribute
Код:
<IndTaxNum ROWNUM="1" Value="" />
Цитата: voladu
C XmlAttribute получается
Код:
<IndTaxNum ROWNUM="1" Value="" />
Ну и всё правильно, ведь xsi:nil="true" означает, что элемент имеет значение null. Т.е. в твоём случае если xsi:nil установлен, то объект IntTaxNum ссылается на null, а не его атрибут Value.
если Value имеет значение, то получается
Код:
<IndTaxNum ROWNUM="1" Value="ХХХХ" />
а нужно
Код:
<IndTaxNum ROWNUM="1">ХХХХ< /IndTaxNum>
а также, если Value имеет значение Nothing, то получается
Код:
<IndTaxNum ROWNUM="1" Value="" /> или <IndTaxNum ROWNUM="1" />
а нужно
Код:
<IndTaxNum ROWNUM="1" xsi:nil="true">