.net webservice中如果dataset中有null值会导致生成的XML缺少字段节点

来源:互联网 发布:社交软件英语翻译 编辑:程序博客网 时间:2024/04/30 15:08

在做android&webservice项目的时候碰到ksoap2解析XML文件因缺少字段导致报错的问题.后来发现问题是由webservice中dataset里该字段有null值导致的。因为dataset中有null值,所以生成XML时,相应的字段就不能生成相应的节点。在无法联系酷哥的情况下,只能去请教度娘了。不知道是用android连dot net webservice方式少有人用,还是这种问题太简单,网上很少有相关的文章。找了很久,解决方法大致有两种,一种是修改XML的生成规则,另一种是自己写代码把null值去掉。
第一种方法可参考http://blog.csdn.net/yusewuhen/article/details/44150833,我个人觉得这种方法继承性不好,所以不推荐。我用第二种方法,自己写方法去null值去掉。刚开始我是在select时,就用isnull(column,”)来处理,但在字段多的情况下,这种方法太累人。后来我还是写了个方法来处理。代码如下:

[WebMethod]        public DataSet KillDatasetNull(DataSet adt_dt)        {            if (adt_dt.Tables[0].Rows.Count > 0)            {                for (int i = 0; i < adt_dt.Tables[0].Rows.Count; i++)                {                    for (int j = 0; j < adt_dt.Tables[0].Columns.Count; j++)                    {                        adt_dt.Tables[0].Rows[i][j] = adt_dt.Tables[0].Rows[i][j].ToString();                        if (adt_dt.Tables[0].Rows[i][j].Equals(""))                        {                            adt_dt.Tables[0].Rows[i][j] = " ";                        }                    }                }                adt_dt.AcceptChanges();                  return adt_dt;            }            else            {                return null;            }        }

注意:adt_dt.AcceptChanges(); 这行不能少,如果没有这行,生成XML时就会出现两部分数据,一部分是修改前的before数据,一部分是修改后的modify数据,但ID是一样的。这样android解析时会提示java.lang.runtimeexception: double id。如下图:

0 0
原创粉丝点击