读书人

C# 回到json数据

发布时间: 2012-12-18 12:43:41 作者: rapoo

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);



[其他解释]
用jquery
[其他解释]
。net for json
[其他解释]
我现在要在服务器端输出json数据,输出后当然要用jquery来获取了
[其他解释]
引用:
。net for json


http://json.codeplex.com/

说反了
[其他解释]
$.ajax({
type:'POST',
url:'AjaxXD.ashx?action=getXDlist',
data:{sales:$("#sales").val()},
error:function(){$("#con_main").html("<span style='color:red'>数据出错!</span>");},
dataType:'json',
success:function(msg){
alert(msg.name);
if(msg!="")
{
for(var q in msg)
为什么有时候返回的是json数据,有时候返回的XML解析错误:未找到元素 位置:moz-nullprincipal:{11b1281c-1713-4ea5-aea8-afca8acc798e} 行:1,列:1:

^
[其他解释]
找到原因了,是因为我把js独立出来了,放在了
<script language="javascript" type="text/javascript" src="js/json.js"></script>
我把这个js提出来,放到页面里就可以了。
想问下,jquery怎么接收来自服务器返回的json???

[其他解释]
C#:
var ms = from n in CC_ where n.sales_account == sales && n.storefront == st orderby n.customer_name select n;

JsonSerializerSettings settings = new JsonSerializerSettings();


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]很多。。。
}
[其他解释]

引用:
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)
……


.net有直接对对象进行json序列化的方法。

第三方开源类库,可以选择json.net。
[其他解释]
用MVC开发吧。返回一个JsonResult相当简单。
[其他解释]
可以选择json.net
[其他解释]
C#:
var ms = from n in CC_ where n.sales_account == sales && n.storefront == st orderby n.customer_name select n;

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
StrResult = JsonConvert.SerializeObject(new { ms_ = ms }, Formatting.Indented, settings);//我这里已序列化了

js:

success:function(msg){//这里也可以接收json,只是下边的提取有问题
if(msg!="")
{
for(var q in msg.ms_)
{
alert(q.ename); 这里并不能取到值,但alert(msg.ms_)可以看到[object]很多。。。
}
[其他解释]
.net自带序列化和反序列化方法。
[其他解释]

/// <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);//序列化

读书人网 >C#

热点推荐