请教一个在.NET一般处理程序ashx中序列化List<>为Json的一个【小问题—嵌套】

TianYi3G2013 2013-10-07 03:17:23
【一般处理程序的代码】

public class JsonHandler : IHttpHandler

{

busers objbusers = new busers();



public void ProcessRequest(HttpContext context)

{

List<easyUI.Model.musers> userList=new List<easyUI.Model.musers>();

userList=objbusers.GetModelList(""); //获取一个类集合;



context.Response.ContentType = "application/json";

context.Response.Cache.SetCacheability(HttpCacheability.NoCache); //禁止浏览器的缓存作用;

System.Type type =userList.GetType(); //获取userList的类型



//序列化:

System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(type);

serializer.WriteObject(context.Response.OutputStream, userList);

}



public bool IsReusable

{

get

{

return false;

}

}

}



//以上代码响应给浏览器的Json为:




但我真正上要的格式是:



-------------------------------------------------------------------------
在PHP中可以这样转换的:
1.           $rs = mysql_query('select * from users');
2. $result = array();
3. while($row = mysql_fetch_object($rs)){
4. array_push($result, $row);
5. }
6.
7. echo json_encode($result);


-------------------------------------------------------------------------
如果熟练Json序列化的,做到这个,应该是容易的事情,对么?小弟刚接触Json,所以不知道怎样处理好,特发帖子请教一下!望有心人指导一下谢谢!
...全文
346 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
TianYi3G2013 2013-10-07
  • 打赏
  • 举报
回复
引用 6 楼 KarasCanvas 的回复:
http://json.codeplex.com/
这样可以了。。谢谢! public void ProcessRequest(HttpContext context) { List<easyUI.Model.musers> userList=new List<easyUI.Model.musers>(); userList=objbusers.GetModelList(""); //获取一个类集合; var data = new System.Collections.Hashtable(); data["rows"] = userList; data["total"] = userList.Count; context.Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(data));
TianYi3G2013 2013-10-07
  • 打赏
  • 举报
回复
引用 6 楼 KarasCanvas 的回复:
http://json.codeplex.com/
怎么调用?怎么同浏览器输出?
public void ProcessRequest(HttpContext context)
        {
            List<easyUI.Model.musers> userList=new List<easyUI.Model.musers>();
            userList=objbusers.GetModelList("");        //获取一个类集合;


            var data = new System.Collections.Hashtable();
            data["rows"] = userList;
            data["total"] = userList.Count;

            //Newtonsoft.Json.Serialization.  //

            Serialize(data);  //找到到。。。命名空间已经引用Newtonsoft.Json.Serialization.  

            //var data = new System.Collections.Hashtable();
            //data["rows"] = userList;
            //data["total"] = userList.Count;  //获取行数

            //context.Response.ContentType = "application/json";
            //context.Response.Cache.SetCacheability(HttpCacheability.NoCache);   //禁止浏览器的缓存作用;        
            //System.Type type =data.GetType();  //获取userList的类型

            ////序列化:
            //System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(type);    
 

            //serializer.WriteObject(context.Response.OutputStream, data);
        }
种草德鲁伊 2013-10-07
  • 打赏
  • 举报
回复
http://json.codeplex.com/
种草德鲁伊 2013-10-07
  • 打赏
  • 举报
回复
用json.net就没上面的问题了
TianYi3G2013 2013-10-07
  • 打赏
  • 举报
回复
引用 3 楼 KarasCanvas 的回复:
改用json.net来序列化吧
嗯嗯,能不能先解决上面这个问题呢?
种草德鲁伊 2013-10-07
  • 打赏
  • 举报
回复
改用json.net来序列化吧
TianYi3G2013 2013-10-07
  • 打赏
  • 举报
回复
引用 1 楼 KarasCanvas 的回复:
var data = new Hashtable(); data["rows"] = userlist; data["total"] = userlist.Count; Serialize(data);
 public void ProcessRequest(HttpContext context)
        {
            List<easyUI.Model.musers> userList=new List<easyUI.Model.musers>();
            userList=objbusers.GetModelList("");        //获取一个类集合;

            var data = new System.Collections.Hashtable();
            data["rows"] = userList;
            data["total"] = userList.Count;  //获取行数

            context.Response.ContentType = "application/json";
            context.Response.Cache.SetCacheability(HttpCacheability.NoCache);   //禁止浏览器的缓存作用;        
            System.Type type =data.GetType();  //获取userList的类型

            //序列化:
            System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(type);     
            serializer.WriteObject(context.Response.OutputStream, data);
        }
【要怎样修改呢?】我这样改,运行就报错了: Type 'System.Collections.Generic.List`1[[easyUI.Model.musers, easyUI.Model, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null]]' with data contract name 'ArrayOfmusers:http://schemas.datacontract.org/2004/07/easyUI.Model' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.
种草德鲁伊 2013-10-07
  • 打赏
  • 举报
回复
var data = new Hashtable(); data["rows"] = userlist; data["total"] = userlist.Count; Serialize(data);

62,196

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧