我正在使用Web服务来查询表中的数据。然后,我必须将它作为DataTable发送给需要它的用户。我可以序列化数据吗?或者我应该将它作为数据集发送。我是Web服务新手,所以我不确定最好的办法。我可以序列化数据表或数据集以通过C#中的Web服务进行传输吗?
回答
您可以通过Web服务传输DataTable。所以这可能是你最好的选择,因为这是客户要求的。
当然。 DataTable和DataSet都是可序列化的,并且它们也具有可以使用的ReadXml()和WriteXml()函数。
如果您将其公开为DataSet
/DataTable
,它仍然会自行进行序列化(通过IXmlSerializable
,IIRC)。请注意,如果您希望服务可以移植到其他模式(即Java客户端等),则DataSet
/DataTable
不会为Web服务上的良好数据类型创建数据类型。但你可以简单地暴露它如此,如果你想......; .NET将处理翻译。
您可以通过DataSet.GetXml()
发送数据从一个数据集的XML字符串,比用户可以用DataSet.ReadXml()
反序列化并通过DataSet.Tables
得到数据集中的数据表祝你好运
最简单,最可互操作的方式是使用GetXml()方法将数据集序列化为XML,然后通过作为来自Web服务的字符串。客户端可以使用ReadXml()方法将其反序列化。
我们已经消耗了这样做的服务,它运行得非常好。
另一种方法是公开服务中的DataSet类,并返回数据集对象。但是这会使事情变得复杂,特别是如果任何客户端应该是非.NET的。
DataTable是可序列化的,但存在一些技巧来通过WebService返回一个无类型的DataTable。
在Web服务方法返回填充的DataTable(在服务端)之前,它必须具有分配的属性TableName。如果在OperationContract DataTable内部接收到类型化DataTable的引用,那么序列化将失败,并显示messaga,如“”服务器没有提供有意义的回复。这可能是由于合同不匹配,过早会话关闭或内部服务器错误引起的“
这意味着您应该填充创建的DataTable,例如使用方法合并(或手动)。这里是DataContract实现示例;
DataTable IHorizonCLService.RetrieveChangeLog(int iId)
{
DataTable dt = new DataTable(); //create new DataTable to be returned by this web method
dt.Merge(HorMan.RetrieveChangeLog(iId)); //get typed DataTable and fills the DataTable
dt.TableName = "SurChangeLogHor"; //assigns name
return dt;
}
从here
而且,从来都只是一个有趣的话,永远,永远发System.Data.DataSet中的实例,通过线路从未有过,是不是现在,和。永远不会有任何理由发送任何实例此类型在任何地方它超越了大规模,使得10,000个属性数据传输对象看起来很轻。事物是可序列化的并不意味着它应该是。
- 1. Web服务中数据集参数的二进制序列化
- 2. 我可以通过iPhone应用程序调用Web服务而不是从数据库中获取数据吗?
- 3. 通过WCF Web服务请求序列化通用XML数据
- 4. 通过Web服务传输数据库查询而不使用数据集
- 5. 我可以保存序列化表单数据吗?
- 6. 我们可以通过intent在android中传输多少数据?
- 7. 可以在Web服务之间传输结果集吗?
- 8. WCF数据服务或RIA服务可以用NHibernate实现吗?
- 9. 我可以使用PubNub进行实时数据收集吗?
- 10. 数据表可以使用输入字段对列进行排序吗?
- 11. 通过wifi进行数据传输
- 12. 我可以使用React中的数据进行服务器渲染吗?
- 13. 通过Ajax传递mysql数据...我可以做到吗?
- 14. 我可以通过ui-router将数据传递给状态吗?
- 15. 我可以通过XDomainRequest正确读取二进制数据吗?
- 16. VBScript数据从阵列传输到行可以更快吗?
- 17. 我可以不按顺序传输HTTP数据吗?
- 18. C#通过Web服务同步两个相同的数据集
- 19. C#:使数据集可序列化以用于SessiosnState模式SqlServer
- 20. 是否可以通过http传输客户端到服务器的数据?
- 21. Angularfire2 - 可以通过查询更新Firebase列表的数据吗?
- 22. 我可以分享YouTube数据集吗?
- 23. jQuery和Web服务:我可以传递数据的多个阵列属性
- 24. 我可以在DataColumn中存储可序列化的数组数据吗?
- 25. 是否可以通过web2py应用程序中的web服务进行通信?
- 26. 我可以通过C套接字发送json数据吗?
- 27. 我可以通过webservice访问远程数据库吗? C#winforms
- 28. 序列化是必须的,以便通过电线传输数据?
- 29. 两个应用程序可以通过UDP数据包进行通信吗?
- 30. 通过web服务按需流式传输数据
确保设置了TableName,否则在序列化时会出错。 – tsilb 2012-10-05 23:16:52