WCF Web服务返回json格式数据

时间:2017-11-09 09:28:46

标签: c# json wcf

我创建了一个返回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;但它没有用。

由于

2 个答案:

答案 0 :(得分:4)

通过在我的代码中应用以下更改,我得到了预期的结果:

  1. 将返回类型从String更改为Stream
  2. 替换以下代码

    return (new JavaScriptSerializer().Serialize(dict));

    WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8"; return new MemoryStream(Encoding.UTF8.GetBytes(sData));

  3. 感谢大家的帮助和支持。愿它能帮助别人。

答案 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;
}