C# 返回json数据
var ms = from n in CC_ where n.sales_account == sales && n.storefront == st orderby n.customer_name select n;
Response.Write("{[");
foreach (var s in ms)
{
Response.Write("sales:"+s.sales);
Response.Write("cu_name:"+s.customer_name);
}
Response.Write("]}");
除了这种方式返回json,还有其他方法吗?请指点。。。。
[最优解释]
感觉和你的需求差不多
var orders = db.Orders.Where(o => o.OrderID <= 10250);//这是取得一系列对象
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
string result = JsonConvert.SerializeObject(new { Orders = orders }, Formatting.Indented, settings);//需要注意的是,如果返回的是一个集合,那么还要在它的上面再封装一个类。否则客户端收到会出错的。
context.Response.Write(result);
settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
StrResult = JsonConvert.SerializeObject(new { ms_ = ms }, Formatting.Indented, settings);
js:
success:function(msg){
if(msg!="")
{
for(var q in msg.ms_)
{
alert(q.ename); 这里并不能取到值,但alert(msg.ms_)可以看到[object]很多。。。
}
[其他解释]
/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
//替换Json的Date字符串
string p = @"\\/Date\((\d+)\+\d+\)\\/";
MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
Regex reg = new Regex(p);
jsonString = reg.Replace(jsonString, matchEvaluator);
return jsonString;
}
/// <summary>
/// JSON反序列化
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
//将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式
string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";
MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);
Regex reg = new Regex(p);
jsonString = reg.Replace(jsonString, matchEvaluator);
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
T obj = (T)ser.ReadObject(ms);
return obj;
}
}
调用:
List<xxxxxx> list = Models.CommonTools.JsonDeserialize<List<xxxxxx>>(CarCookie.Value);//反序列化
string JsonString = Models.CommonTools.JsonSerializer<List<xxx>>(J_car_List);//序列化