ASP.NET网页编程之当json.js碰见dynamic.net烂尾篇仓酷云
在经过全球个人PC市场占有90%的微软对asp.net不断优化与整合后,asp.net与微软自身平台的动用上更加的高效,加上asp.net在应用上非常容易上手,相信asp.net仍会是最多客户选用的脚本语言,并会在未来几年继续领跑。因为比来较忙,上一篇的坑估量要渐渐填了。感到写文章先容要比写程序还累啊。先看看测试程序,可以懂得api撑持哪些功效:staticvoidMain(string[]args){//wrapper对象dynamicdata=DJson.Wrap(new{name="Jane",male=false,age=24,dob=DateTime.Now,friend=new{name="Jesse",male=true,age=32,dob=DateTime.Now},mobile=newobject[]{new[]{86},13888888888},});Console.WriteLine(data.Stringfy());//数组data=newDJsonArray();data=new{name="小朋盂1号"};data=new{name="小朋盂2号"};data=new{name="小朋盂3号"};Console.WriteLine(data.Stringfy());//反序列化varjson=data.Stringfy();dynamicobj=DJson.Parse(json);//修正反序列化后的数据obj=new{name="mike",age=21,dob=DateTime.Now};Console.WriteLine(obj.Stringfy());//实践使用,将twitterstatues反序列化json=System.IO.File.ReadAllText("e:/twitter.js");dynamicstatuses=DJson.Parse(json);for(inti=0;i<statuses.Length;i++){varstatus=statuses;Console.WriteLine("id:{0}nname:{1}nfrom:{2}ntext:{3}n",status.user.id,status.user.name,status.user.location,status.text);}Console.ReadKey();}
twitter文件请在这里下载
先放上代码,实在很复杂,今后再渐渐剖析
publicclassDJson:DynamicObject{protectedDictionary<string,object>_expando=newDictionary<string,object>();publicoverridestringToString(){returnthis.Stringify();}publicIEnumerable<string>Keys{get{return_expando.Keys;}}publicobjectthis{get{return_expando;}set{_expando=value;}}publicDJson(){}publicstaticDJsonWrap(objectobj){if(!(objisstring)&&(objisIEnumerable)&&!(objisDictionary<string,object>)){vararray=newDJsonArray();inti=0;foreach(objectvinobjasIEnumerable)array=DJson.Wrap(v);returnarray;}else{vardj=newDJson();if(objisDictionary<string,object>){foreach(varkvinobjasDictionary<string,object>){if(kv.Value==null)dj=(object)null;elseif(IsPrimitive(kv.Value.GetType()))dj=kv.Value;elsedj=DJson.Wrap(kv.Value);}}else{vart=obj.GetType();if(IsPrimitive(t))thrownewArgumentException();foreach(varpint.GetProperties()){varv=p.GetValue(obj,null);if(IsPrimitive(p.PropertyType))dj=v;elsedj=DJson.Wrap(v);}}returndj;}}publicstaticDJsonParse(stringjson){varobj=(newJavaScriptSerializer()).DeserializeObject(json);returnDJson.Wrap(obj);}publicstringStringify(){varserializer=newJavaScriptSerializer();serializer.RegisterConverters(newJavaScriptConverter[]{newDJsonConverter()});if(thisisDJsonArray)returnserializer.Serialize((thisasDJsonArray).ToArray());returnserializer.Serialize(this);}publicoverrideboolTryGetMember(GetMemberBinderbinder,outobjectresult){if(_expando.TryGetValue(binder.Name,outresult))returntrue;returnfalse;}publicoverrideboolTrySetMember(SetMemberBinderbinder,objectvalue){if(!(valueisstring)&&(valueisIEnumerable))_expando=newDJsonArray(valueasIEnumerable);else_expando=value;returntrue;}internalstaticboolIsPrimitive(Typetype){returntype.FullName.StartsWith("System.")&&!type.FullName.StartsWith("System.Collection");}}publicclassDJsonArray:DJson{Dictionary<int,object>_array=newDictionary<int,object>();publicobjectthis{get{return_array;}set{_array=value;}}publicintLength{get{return_array.Keys.Count;}}publicDJsonArray(){}publicDJsonArray(IEnumerablearray){inti=0;foreach(varobjinarray)this=obj;}publicobject[]ToArray(){return_array.Values.ToArray();}publicDJsonToObject(){vardj=newDJson();foreach(stringkeyin_expando.Keys)dj=_expando;foreach(intkeyin_array.Keys)dj=_array;returndj;}}internalclassDJsonConverter:JavaScriptConverter{publicoverrideIDictionary<string,object>Serialize(objectobj,JavaScriptSerializerserializer){vardj=(DJson)obj;varresult=newDictionary<string,object>();foreach(stringkeyindj.Keys){if(djisDJsonArray)result=(djasDJsonArray).ToArray();elseresult=dj;}returnresult;}publicoverrideIEnumerable<Type>SupportedTypes{get{returnnewList<Type>(newType[]{typeof(DJson),typeof(DJsonArray)});}}publicoverrideobjectDeserialize(IDictionary<string,object>dictionary,Typetype,JavaScriptSerializerserializer){thrownewNotImplementedException();}}
Newton的json库比来仿佛做了不异的事变,入手下手撑持dynamic了
http://james.newtonking.com/archive/2011/01/03/json-net-4-0-release-1-net-4-and-windows-phone-support.aspx
语言是不是不是最重要的? ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。 ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。 我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。 JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。 关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。 Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。 ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。 关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。 asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦! 现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
页:
[1]