我有一个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}]
答案 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}]"
如果反斜杠是最好的游戏,那么您可能需要定义和对象作为响应,而不是字符串,然后传递该对象。