【发布时间】:2023-03-15 06:43:01
【问题描述】:
我有一个REST 服务,它返回一个json 序列化的DataTable。
当我向服务发出请求时,我没有收到任何数据(来自 chrome 的“未收到数据”),但是当我将返回类型更改为 string 并返回一个序列化的字符串 DataTable 时,一切正常很好(除非我必须解析 Json 字符串)。
//Doesn't Work
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json,
UriTemplate = "data")]
public DataTable LoadData2() {
return JsonQueryDatabase2(VCAPSProduction);
}
.
// Works, but returns a json string
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json,
UriTemplate = "data")]
public string LoadData2() {
return JsonConvert.SerializeObject(JsonQueryDatabase2(connString));
}
如何让我的服务使用 DataTable 返回 Json 对象?
【问题讨论】:
-
这是因为您要序列化的“对象”是一个数据表,因此您在另一端得到一个数据表,而是填充对象列表并将其序列化,这通常是惯例。阅读stackoverflow.com/questions/16441880/how-to-return-json-object
-
WCF 默认不使用 Json.Net。要么使用this 将Json.Net 用作序列化器,要么返回
System.ServiceModel.Channels.Message并像现在一样用Json.Net 填充它。 (return WebOperationContext.Current.CreateTextResponse(serializeHere)) -
@Paul 我让它返回了一个列表并且它正在工作。谢谢。
-
我也要试试你的建议@L.B
-
@L.B 效果很好,非常感谢。