我有一个大约 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 节点属性的类并创建一个列表,因为我的选择查询是基于条件的,所以在传入 sql 后在客户端生成
那么我如何传递 XML 中的数据类型,或者是否有任何其他方法将数据从 WCF 服务传递到 Silverlight 应用程序?
最佳答案
服务应该返回强类型对象,这些对象被序列化为一个对象或一个对象数组到 SOAP、POX(普通的旧 xml rest)或 json(javascript 对象表示法)中。如果使用 REST,WCF 可以简单地通过为对象赋予 DataContract 属性来返回 XML 或 JSON 格式。
DataSet(或 DataReader)从数据库返回。服务提供了对可能随时间变化的存储机制的抽象。
通过传回序列化对象,silverlight(或任何其他客户端)可以将它们反序列化为更容易处理的对象。
此外,我支持关于不传回 20K 行的评论。找到分页数据的方法(分块请求)。
搜索 REST 和 WCF 或 Web 服务和 WCF。
希望对您有所帮助。
关于c# - 将数据集从 WCF 服务传递到 Silverlight 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7214156/