如何从WCF Web服务返回JSON?

时间:2018-12-26 08:44:08

标签: json wcf json.net

我有一个wcf Web服务,该服务通常返回DataTable。我使用Newtonsoft.JSON对其进行了序列化,但是它以字符串标记返回,我的意思是“”标记。这就是为什么我不能在Android中使用它的原因。

我尝试过返回对象,但没有任何改变。我尝试了更改响应格式或类似的格式,但仍然相同。

这是我的WCF接口代码

[WebGet (BodyStyle = WebMessageBodyStyle.Bare,
        ResponseFormat =WebMessageFormat.Json,
        UriTemplate = "GetRecords")]

这是我的服务代码。

     public string btGetTable()
     {
        DataTable dt = new DataTable("ExampleDT");
        dt.Columns.Add(new DataColumn("KODU", typeof(string)));
        dt.Columns.Add(new DataColumn("ACIKLAMA", typeof(string)));
        dt.Columns.Add(new DataColumn("KAPALI_FL", typeof(bool)));
        dt.Columns.Add(new DataColumn("TARIH", typeof(DateTime)));
        dt.Columns.Add(new DataColumn("TUTAR", typeof(Decimal)));
        dt.Columns.Add(new DataColumn("DURUM", typeof(short)));

        DataRow dr = dt.NewRow();
        dr[0] = "TLP.00000001";
        dr[1] = "Dummy Record 1";
        dr[2] = false;
        dr[3] = DateTime.Now;
        dr[4] = 1254.78d;
        dr[5] = 0;
        dt.Rows.Add(dr);

 string serializedDt = JsonConvert.SerializeObject(dt);
 return serializedDt;

这是实际输出

 "[{\"KODU\":\"TLP.00000001\",\"ACIKLAMA\":\"Dummy Record 1\",\"KAPALI_FL\":false,\"TARIH\":\"2018-12-26T11:42:03.2652779\",\"TUTAR\":1254.78,\"DURUM\":0}]"

预期输出

 [{"KODU":"TLP.00000001","ACIKLAMA":"Dummy Record 1","KAPALI_FL":false,"TARIH":"2018-12-26T11:42:03.2652779","TUTAR":1254.78,"DURUM":0}]

1 个答案:

答案 0 :(得分:0)

这是否对使用您的Web方法的客户端造成问题?

反斜杠实际上并不存在,如果在调试时使用Text Visualizer,您将看到不带反斜杠的JSON:

[{"KODU":"TLP.00000001","ACIKLAMA":"Dummy Record 1","KAPALI_FL":false,"TARIH":"2018-12-26T12:19:22.6096277","TUTAR":1254.78,"DURUM":0}]

反斜杠可见/用于表示在请求中传递双引号时的转义符。

如果您将所有双引号替换为空字符串,则反斜杠将不再存在。即return serializeddt.Replace("\"","");

"[{KODU:TLP.00000001,ACIKLAMA:Dummy Record 1,KAPALI_FL:false,TARIH:2018-12-26T12:44:16.737631,TUTAR:1254.78,DURUM:0}]"

如果反斜杠是最好的游戏,那么您可能需要定义和对象作为响应,而不是字符串,然后传递该对象。