Принудительно отображать тег XML при сериализации набора данных - PullRequest
1 голос
/ 29 января 2009

Я создаю веб-сервис, в котором есть веб-метод, возвращающий объект набора данных.

У меня возникла проблема. XML-теги не записываются, когда его значение равно нулю.

Упрощенный пример будет следующим:

ID   Name    Text
--  ------   -------------
1    NULL     test1              <------- null value
2    toto     test2
3    tata     test3

получает XML-сериализацию для:

<table roworder="1">
   <id>   1     </id>            <----- element missing when value = null
   <text> test1 </text>
</table>
<table roworder="2">
     <id>   2   </id>
   <name> toto  </name>
   <text> test2 </text>
</table>    
<table roworder="3">
     <id> 3     </id>
   <name> tata  </name>
   <text> test3 </text>
</table>

Это вызывает у меня проблемы, когда я подключаю этот XML в службах Reporting Services. Если элемент первой строки имеет значение NULL, он не распознает его как поле отчета и делает весь столбец отсутствующим в результатах.

Есть ли способ заставить сериализацию XML поместить пустые элементы, если его значение равно нулю?

EX:

<table roworder="1">
   <id>   1     </id>
   <name>       </name>             <---- empty element for null value
   <text> test1 </text>
</table>

Спасибо

1 Ответ

3 голосов
/ 29 января 2009

Вы можете изменить SQL так, чтобы он возвращал пустую строку вместо нуля.

select COALESCE(Name, '') from table_name;

[Редактировать] Если это не вариант, может быть другой (довольно уродливый) способ.

  1. Создайте еще один пустой набор данных со схемой, извлеченной из исходного набора данных.
  2. Выполните итерацию по обнуляемым столбцам в этом наборе данных и установите DefaultValue.
  3. Загрузить XML, сгенерированный из первого набора данных, в этот набор данных (только данные, а не схема).
  4. Создать XML из второго набора данных.

тьфу!

[Редактировать 2] Или вы можете просто перебирать набор данных и создавать XML самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...