如何在wcf中返回json格式

本文关键字:返回 json 格式 wcf | 更新日期: 2023-09-27 18:29:25

iam是wcf的新手。iam开发wcf-restful

iam通过使用以下代码序列化为json格式返回字符串

public string ConvertDataTabletoString()
    {
        DataTable dt = new DataTable();
        using (SqlConnection con = new SqlConnection("Data Source=mar-pc;database=user;User    ID=sa;Password=123123;"))
        {
            using (SqlCommand cmd = new SqlCommand("select title=tname,tid=taddress from userdetails where userid='1'", con))
            {
                con.Open();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
                System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
                List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
                Dictionary<string, object> row;
                foreach (DataRow dr in dt.Rows)
                {
                    row = new Dictionary<string, object>();
                    foreach (DataColumn col in dt.Columns)
                    {
                        row.Add(col.ColumnName, dr[col]);
                    }
                    rows.Add(row);
                }
                return serializer.Serialize(rows);
            }
        }
    }

我在哪里得到的结果

"[{''"title ''":''"Sathyam ''",''"tid ''":"NiZamabad''"}]"

我想得到的结果

{"title":"Sathyam","tid":"Nizamabad"}

iam运营合同和

 [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "MyGetData/{value}/{password}")]

帮我吧,我试过裹身式,也没有

如何在wcf中返回json格式

您有方形制动器,因为您序列化的是字典列表,而不是单个对象。

转义字符的问题可能是双重序列化:您已经在conversion方法中使用了ResponseFormat = WebMessageFormat.Json和序列化dictionary。看看这个问题:如何从WCF服务返回干净的JSON?

是否从WCF服务方法调用ConvertDataTabletoString()方法?如果是,则不必手动序列化List<Directory>,因为它是WCF框架作业。

在我看来,你的代码应该是:

public List<Dictionary<string, object>> ConvertDataTabletoString()
{
   // your prev code ...
   return rows;               
}

在WCF服务方法中,您应该只返回List<Dictionary<string, object>

您可以使用以下方法来解决ur问题:

  [ServiceContract]
    public interface IService
    {
 [WebGet(UriTemplate = "GetStates", ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<ServiceData> GetStates();
  }
And in Service.cs
        public List<ServiceData> GetStates()
        {
            using (var db = new local_Entities())
            {
                var statesList = db.States.ToList();
                return statesList.Select(state => new ServiceData
                {
                    Id = state.StateId, Value = state.StateName
                }).OrderBy(s => s.Value).ToList();
            }
        }
Note you have to just return the return type collection, at my end I have a List of ServiceData 
  public class ServiceData
    {
        public int Id { get; set; }
        public string Value { get; set; }
    }

我在这里得到了答案返回wcf 中的原始json(字符串)

将返回类型从字符串更改为流,并在末尾添加了这一部分

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