如何在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}")]
帮我吧,我试过裹身式,也没有
您有方形制动器,因为您序列化的是字典列表,而不是单个对象。
转义字符的问题可能是双重序列化:您已经在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)));