微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为Silverlight项目创建通用WebService数据访问

在使用Silverlight之前,我们创建了自己的webService做为通用数据访问。开发者传递一个sql语句 ,即可得到一个DataSet,DataTable作为返回值。在Silverlight项目中,由于其对DataTable的限制,我 们不得不首先得到DataTable,而后在本地再创建Web service(WCF),对得到的DataTable进行转换。转换 为数组或者泛型集合以适应Silverlight的需要。

但是这样做难免有些繁琐,且开发者做出了很多费力的工作。

这里,我们对原来的Webservice做出了一些改动:但凡返回值为DataSet的webMethod都为其加上一层 “外衣”,将其转化为XElement后返回给调用一个XML档案。开发者只需利用LINQ TO Xml通过简单的 xml操作就可得到需要的集合。这样就免除了每个专案建立“自己”的service的工作。

下面通过一个简单的Demo对这个操作做出说明:

根据得到的DataTable,为其创建XElement作为返回值

  static void Main(string[] args) { //获取数据源DataTable DataTable dt = client.ExecuteQuery(sql).Tables[0]; //创建XML Document XDocument doc= new XDocument( new XElement("tables",new XAttribute("xmlns", ""),new XElement("table",new XAttribute("name", "0"),new XElement("columns"),new XElement("rows"))) ); XElement columns = doc.Element("tables").Element ("table").Element("columns"); foreach (DataColumn col in dt.Columns) { //新增一个Element Column columns.Add(new XElement("column", col.ColumnName),new XAttribute("type", col.DataType.Name) )); } XElement rows = doc.Element("tables").Element("table").Element ("rows"); foreach (DaTarow row in dt.Rows) { //新增一个element Row XElement newrow = new XElement("row"); rows.Add(newrow); string data = null; foreach (DataColumn col in dt.Columns) { switch (col.DataType.Name) { case "DateTime": data = (row[col] == dbnull.Value  ? "" : Convert.ToDateTime(row[col]).ToString("yyyy/MM/dd HH:mm:ss")); break; default: data = (row[col] == dbnull.Value  ? "" : row[col].ToString()); break; } //为新增的row添加Attribute newrow.Add(new XAttribute(col.ColumnName, data) ); } } XElement element = doc.Element("tables"); Console.WriteLine(element.ToString()); }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐