我有一个大约20,000行的数据集,我使用此代码将其转换为IEnumerable<Dictionary<string, object>>
:
IEnumerable<Dictionary<string, object>> IEnu = ds.Tables[0]
.AsEnumerable()
.Select(r => ds.Tables[0]
.Columns.Cast<DataColumn>().Select(c => new {
Column = c.ColumnName,
Value = r[c]
}).ToDictionary(
i => i.Column,
i => i.Value != DBNull.Value ? i.Value : null
)
);
但是IENU
对象大小太大(大约7到8 MB)。这是一个非常大的尺寸,可通过该服务。另一种选择是生成数据集的XML(大约1到2 MB)但是仍然存在一个问题,即我不认识XML节点数据的数据类型,我也没有创建任何包含XML节点属性的类并创建一个列表,因为我的select查询是标准库,因此在传递sql
那么如何在XML中传递数据类型,还是有其他方法将数据从WCF服务传递到Silverlight应用程序?
答案 0 :(得分:2)
服务应该将序列化为对象或对象数组的强类型对象返回到SOAP,POX(普通旧xml rest)或json(javascript对象表示法)。如果使用REST,WCF可以简单地通过使用DataContract属性归属对象来返回XML或JSON格式。
DataSets(或DataReaders)从数据库返回。服务提供了对存储机制的抽象,可能随时间而变化。
通过传回序列化对象,silverlight(或任何其他客户端)可以将它们反序列化为更容易处理的对象。
另外,关于不传回20K行的评论。找到分页数据的方法(以块为单位请求)。
搜索REST和WCF或Web服务和WCF。
希望有所帮助。
答案 1 :(得分:0)