2009-01-29 40 views
1

我正在构建一个web服务,它有一个webmethod返回一个Dataset对象。强制XML标记在序列化数据集时出现

我遇到问题当其关联值为空时,不会写入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> 

这是给我的问题,当我在Reporting Services挂钩这个XML起来。如果第一行的元素为空,则不会将其识别为报告字段,并且结果中没有整列。

有没有办法强制XML序列化,如果其相关联的值为空,将放入空元素?

EX:

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

感谢

回答

3

你可以改变SQL,而不是返回空的空字符串。

select COALESCE(Name, '') from table_name;

[编辑]如果这是不是一种选择,有可能是另一种(相当丑陋的)的方式。

  1. 使用从原始数据集提取的模式创建另一个空白数据集。
  2. 在此数据集中遍历可空列,并设置DefaultValue
  3. 将从第一个数据集生成的XML加载到此数据集中(只是数据,而不是再次)。
  4. 从第二个数据集生成XML。

唉!

[编辑2]或者你可以迭代数据集并自己创建XML。

+0

Chetan:这不是一个选项,因为我们返回的数据集来自一些奇怪的OLEDB连接,并且我们对它对数据库的查询没有实际影响。 – scoob 2009-01-29 20:52:28