我创建了一个返回json格式数据的WCF Web服务。我的代码如下:
String sJSONdata = "";
StreamReader reader = new StreamReader(data);
sJSONdata = reader.ReadToEnd();
//'now convert the JSON into a data table
DataTable dt = GetJSONTable(sJSONdata);
dt.TableName = "Customer";
Dictionary<string, string> dict = new Dictionary<string, string>();
foreach (DataRow rs in dt.Rows)
{
dict = new Dictionary<string, string>();
foreach (DataColumn col in dt.Columns)
{
dict.Add(col.ColumnName, rs[col].ToString());
}
}
return (new JavaScriptSerializer().Serialize(dict));
我得到以下输出:
{&#34; SampleServiceResult&#34;: &#34; {\&#34;标识\&#34;:\&#34; 1 \&#34; \&#34;名称\&#34;:\&#34; XYZ \&# 34; \&#34;电子邮件\&#34;:\&#34; xya@test.com \&#34;}&#34; }
但我想要输出如下:
{&#34; SampleServiceResult&#34;: {&#34;标识&#34;:&#34; 1&#34;&#34;名称&#34;:&#34; XYZ&#34;&#34;电子邮件&#34;:&#34; xya@test.com"}}
在输出中添加&#34; \&#34;逃避性格。如何删除它并返回有效的json?
我试图替换&#34; \&#34;但它没有用。
由于
答案 0 :(得分:4)
通过在我的代码中应用以下更改,我得到了预期的结果:
替换以下代码
return (new JavaScriptSerializer().Serialize(dict));
与
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
return new MemoryStream(Encoding.UTF8.GetBytes(sData));
感谢大家的帮助和支持。愿它能帮助别人。
答案 1 :(得分:2)
最好让WCF负责序列化而不是自己动手。
您可以使用WebGet attribute并指定操作合同的响应格式。
另外,正如评论中指出的那样,您可以返回自己的.NET类而不是字典。
操作合同可能与此类似:
[OperationContract]
[WebGet(UriTemplate = "/GetCustomer", ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare)]
Customer GetCustomer();
以下数据合同:
[DataContract]
public class Customer
{
[DataMember]
public string Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Email { get; set; }
}
然后,您可以使用与此类似的代码实现操作合同:
public Customer GetCustomer()
{
Customer customer = GetCustomerData(); //Get the data and return a customer object
return customer;
}