C# JsonHelper 操作辅助类,拿来直接用
四个主要操作类:JsonConverter、JsonHelper、JsonSplit、AjaxResult
一、JsonConverter:
自定义查询对象转换动态类、object动态类转换json包、json转换object动态类、DataReader转换为Json、DataSet转换为Json、DataTable转成Json、Datatable转换为Json、格式化字符型日期型布尔型、过滤特殊字符等
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.Data; usingSystem.Linq; usingSystem.Web.Script.Serialization; usingSystem.Collections; namespaceCommon { publicclassJsonConverter { ///<summary> ///自定义查询对象转换动态类 ///addyuangangby2015-05-19 ///</summary> ///<paramname="obj"></param> ///<returns></returns> publicstaticdynamicJsonClass(objectobj) { returnConvertJson(Serialize(obj,true)); } ///<summary> ///object动态类转换json包 ///addyuangangby2015-05-19 ///</summary> ///<paramname="obj">对象</param> ///<paramname="DateConvert">时间戳是否转换成日期类型</param> ///<returns></returns> publicstaticstringSerialize(objectobj,boolDateConvert=false) { JavaScriptSerializerjss=newJavaScriptSerializer(); varstr=jss.Serialize(obj); if(DateConvert) { str=System.Text.RegularExpressions.Regex.Replace(str,@"\\/Date\((\d+)\)\\/",match=> { DateTimedt=newDateTime(1970,1,1); dt=dt.AddMilliseconds(long.Parse(match.Groups[1].Value)); dt=dt.ToLocalTime(); returndt.ToString("yyyy-MM-ddHH:mm:ss"); }); } returnstr; } ///<summary> ///json转换object动态类 ///addyuangangby2015-05-19 ///</summary> ///<paramname="json"></param> ///<returns></returns> publicstaticdynamicConvertJson(stringjson) { JavaScriptSerializerjss=newJavaScriptSerializer(); jss.RegisterConverters(newJavaScriptConverter[]{newDynamicJsonConverter()}); dynamicdy=jss.Deserialize(json,typeof(object))asdynamic; returndy; } ///<summary> ///DataReader转换为Json ///</summary> ///<paramname="dataReader">DataReader对象</param> ///<returns>Json字符串</returns> publicstaticstringToJson(IDataReaderdataReader) { try { StringBuilderjsonString=newStringBuilder(); jsonString.Append("["); while(dataReader.Read()) { jsonString.Append("{"); for(inti=0;i<dataReader.FieldCount;i++) { Typetype=dataReader.GetFieldType(i); stringstrKey=dataReader.GetName(i); stringstrValue=dataReader[i].ToString(); jsonString.Append("\""+strKey+"\":"); strValue=StringFormat(strValue,type); if(i<dataReader.FieldCount-1) { jsonString.Append(strValue+","); } else { jsonString.Append(strValue); } } jsonString.Append("},"); } if(!dataReader.IsClosed) { dataReader.Close(); } jsonString.Remove(jsonString.Length-1,1); jsonString.Append("]"); if(jsonString.Length==1) { return"[]"; } returnjsonString.ToString(); } catch(Exceptionex) { throwex; } } ///<summary> ///DataSet转换为Json ///addyuangangby2015-05-19 ///</summary> ///<paramname="dataSet">DataSet对象</param> ///<returns>Json字符串</returns> publicstaticstringToJson(DataSetdataSet) { stringjsonString="{"; foreach(DataTabletableindataSet.Tables) { jsonString+="\""+table.TableName+"\":"+ToJson(table)+","; } jsonString=jsonString.TrimEnd(','); returnjsonString+"}"; } ///<summary> ///DataTable转成Json ///addyuangangby2015-05-19 ///</summary> ///<paramname="jsonName"></param> ///<paramname="dt"></param> ///<returns></returns> publicstaticstringToJson(DataTabledt,stringjsonName) { StringBuilderJson=newStringBuilder(); if(string.IsNullOrEmpty(jsonName)) jsonName=dt.TableName; Json.Append("{\""+jsonName+"\":["); if(dt.Rows.Count>0) { for(inti=0;i<dt.Rows.Count;i++) { Json.Append("{"); for(intj=0;j<dt.Columns.Count;j++) { Typetype=dt.Rows[i][j].GetType(); Json.Append("\""+dt.Columns[j].ColumnName.ToString()+"\":"+StringFormat(dt.Rows[i][j]isDBNull?string.Empty:dt.Rows[i][j].ToString(),type)); if(j<dt.Columns.Count-1) { Json.Append(","); } } Json.Append("}"); if(i<dt.Rows.Count-1) { Json.Append(","); } } } Json.Append("]}"); returnJson.ToString(); } ///<summary> ///Datatable转换为Json ///addyuangangby2015-05-19 ///</summary> ///<paramname="table">Datatable对象</param> ///<returns>Json字符串</returns> publicstaticstringToJson(DataTabledt) { StringBuilderjsonString=newStringBuilder(); jsonString.Append("["); DataRowCollectiondrc=dt.Rows; for(inti=0;i<drc.Count;i++) { jsonString.Append("{"); for(intj=0;j<dt.Columns.Count;j++) { stringstrKey=dt.Columns[j].ColumnName; stringstrValue=drc[i][j].ToString(); Typetype=dt.Columns[j].DataType; jsonString.Append("\""+strKey+"\":"); strValue=StringFormat(strValue,type); if(j<dt.Columns.Count-1) { jsonString.Append(strValue+","); } else { jsonString.Append(strValue); } } jsonString.Append("},"); } jsonString.Remove(jsonString.Length-1,1); jsonString.Append("]"); if(jsonString.Length==1) { return"[]"; } returnjsonString.ToString(); } ///<summary> ///格式化字符型、日期型、布尔型 ///addyuangangby2015-05-19 ///</summary> ///<paramname="str"></param> ///<paramname="type"></param> ///<returns></returns> privatestaticstringStringFormat(stringstr,Typetype) { if(type!=typeof(string)&&string.IsNullOrEmpty(str)) { str="\""+str+"\""; } elseif(type==typeof(string)) { str=String2Json(str); str="\""+str+"\""; } elseif(type==typeof(DateTime)) { str="\""+str+"\""; } elseif(type==typeof(bool)) { str=str.ToLower(); } elseif(type==typeof(byte[])) { str="\""+str+"\""; } elseif(type==typeof(Guid)) { str="\""+str+"\""; } returnstr; } ///<summary> ///过滤特殊字符 ///addyuangangby2015-05-19 ///</summary> ///<paramname="s"></param> ///<returns></returns> publicstaticstringString2Json(Strings) { StringBuildersb=newStringBuilder(); for(inti=0;i<s.Length;i++) { charc=s.ToCharArray()[i]; switch(c) { case'\"': sb.Append("\\\"");break; case'\\': sb.Append("\\\\");break; case'/': sb.Append("\\/");break; case'\b': sb.Append("\\b");break; case'\f': sb.Append("\\f");break; case'\n': sb.Append("\\n");break; case'\r': sb.Append("\\r");break; case'\t': sb.Append("\\t");break; case'\v': sb.Append("\\v");break; case'\0': sb.Append("\\0");break; default: sb.Append(c);break; } } returnsb.ToString(); } publicstaticstringGetDataGridJsonByDataSet(DataSetds,stringtotalProperty,stringroot) { returnGetDataGridJsonByDataTable(ds.Tables[0],totalProperty,root); } publicstaticstringGetDataGridJsonByDataTable(DataTabledt,stringtotalProperty,stringroot) { StringBuilderjsonBuilder=newStringBuilder(); jsonBuilder.Append("({\""+totalProperty+"\":\""+dt.Rows.Count+"\","); jsonBuilder.Append("\""); jsonBuilder.Append(root); jsonBuilder.Append("\":["); for(inti=0;i<dt.Rows.Count;i++) { jsonBuilder.Append("{"); for(intj=0;j<dt.Columns.Count;j++) { jsonBuilder.Append("\""); jsonBuilder.Append(dt.Columns[j].ColumnName); jsonBuilder.Append("\":\""); jsonBuilder.Append(dt.Rows[i][j].ToString()); jsonBuilder.Append("\","); } jsonBuilder.Remove(jsonBuilder.Length-1,1); jsonBuilder.Append("},"); } jsonBuilder.Remove(jsonBuilder.Length-1,1); jsonBuilder.Append("]"); jsonBuilder.Append("})"); returnjsonBuilder.ToString(); } publicstaticstringGetTreeJsonByDataSet(DataSetds) { returnGetTreeJsonByDataTable(ds.Tables[0]); } publicstaticstringGetTreeJsonByDataTable(DataTabledataTable) { DataTabledt=FormatDataTableForTree(dataTable); StringBuilderjsonBuilder=newStringBuilder(); jsonBuilder.Append("["); for(inti=0;i<dt.Rows.Count;i++) { jsonBuilder.Append("{"); for(intj=0;j<dt.Columns.Count;j++) { jsonBuilder.Append("\'"); if(dt.Columns[j].ColumnName=="leaf") { stringleafValue=dt.Rows[i][j].ToString(); if(!string.IsNullOrEmpty(leafValue)) { jsonBuilder.Append(dt.Columns[j].ColumnName); jsonBuilder.Append("\':\'"); jsonBuilder.Append(dt.Rows[i][j].ToString()); jsonBuilder.Append("\',"); } else { jsonBuilder.Remove(jsonBuilder.Length-1,1); } } elseif(dt.Columns[j].ColumnName=="customUrl") { jsonBuilder.Remove(jsonBuilder.Length-1,1); jsonBuilder.Append(dt.Columns[j].ColumnName); jsonBuilder.Append(":\'"); jsonBuilder.Append(dt.Rows[i][j].ToString()); jsonBuilder.Append("\',"); } else { jsonBuilder.Append(dt.Columns[j].ColumnName); jsonBuilder.Append("\':\'"); jsonBuilder.Append(dt.Rows[i][j].ToString()); jsonBuilder.Append("\',"); } } jsonBuilder.Remove(jsonBuilder.Length-1,1); jsonBuilder.Append("},"); } jsonBuilder.Remove(jsonBuilder.Length-1,1); jsonBuilder.Append("]"); returnjsonBuilder.ToString(); } privatestaticDataTableFormatDataTableForTree(DataTabledt) { DataTabledtTree=newDataTable(); dtTree.Columns.Add("id",typeof(string)); dtTree.Columns.Add("text",typeof(string)); dtTree.Columns.Add("leaf",typeof(string)); dtTree.Columns.Add("cls",typeof(string)); dtTree.Columns.Add("customUrl",typeof(string)); dtTree.AcceptChanges(); for(inti=0;i<dt.Rows.Count;i++) { DataRowdrTree=dtTree.NewRow(); drTree["id"]=dt.Rows[i]["id"].ToString(); drTree["text"]=dt.Rows[i]["text"].ToString(); if(dt.Rows[i]["leaf"].ToString()=="Y") { drTree["leaf"]="true"; drTree["cls"]="file"; } else { drTree["cls"]="folder"; } drTree["customUrl"]=dt.Rows[i]["customUrl"].ToString(); dtTree.Rows.Add(drTree); } returndtTree; } } ///<summary> ///动态JSON解析 ///addyuangangby2015-05-19 ///</summary> publicclassDynamicJsonObject:System.Dynamic.DynamicObject { privateIDictionary<string,object>Dictionary{get;set;} publicDynamicJsonObject(IDictionary<string,object>dictionary) { this.Dictionary=dictionary; } publicoverrideboolTryGetMember(System.Dynamic.GetMemberBinderbinder,outobjectresult) { result=this.Dictionary[binder.Name]; if(resultisIDictionary<string,object>) { result=newDynamicJsonObject(resultasIDictionary<string,object>); } elseif(resultisArrayList&&(resultasArrayList)isIDictionary<string,object>) { result=newList<DynamicJsonObject>((resultasArrayList).ToArray().Select(x=>newDynamicJsonObject(xasIDictionary<string,object>))); } elseif(resultisArrayList) { result=newList<object>((resultasArrayList).ToArray()); } returnthis.Dictionary.ContainsKey(binder.Name); } } ///<summary> ///动态JSON转换 ///addyuangangby2015-05-19 ///</summary> publicclassDynamicJsonConverter:JavaScriptConverter { publicoverrideobjectDeserialize(IDictionary<string,object>dictionary,Typetype,JavaScriptSerializerserializer) { if(dictionary==null) thrownewArgumentNullException("dictionary"); if(type==typeof(object)) { returnnewDynamicJsonObject(dictionary); } returnnull; } publicoverrideIDictionary<string,object>Serialize(objectobj,JavaScriptSerializerserializer) { thrownewNotImplementedException(); } publicoverrideIEnumerable<Type>SupportedTypes { get{returnnewSystem.Collections.ObjectModel.ReadOnlyCollection<Type>(newList<Type>(newType[]{typeof(object)}));} } } }
二、JsonHelper:json的辅助类
usingSystem.Collections.Generic; usingSystem.Text; usingNewtonsoft.Json; usingSystem.Runtime.Serialization.Json; usingSystem.IO; namespaceCommon { ///<summary> ///提供了一个关于json的辅助类 ///</summary> publicclassJsonHelper { #regionMethod ///<summary> ///类对像转换成json格式 ///</summary> ///<returns></returns> publicstaticstringToJson(objectt) { returnJsonConvert.SerializeObject(t,Newtonsoft.Json.Formatting.Indented,newJsonSerializerSettings{NullValueHandling=NullValueHandling.Include}); } ///<summary> ///类对像转换成json格式 ///</summary> ///<paramname="t"></param> ///<paramname="HasNullIgnore">是否忽略NULL值</param> ///<returns></returns> publicstaticstringToJson(objectt,boolHasNullIgnore) { if(HasNullIgnore) returnJsonConvert.SerializeObject(t,Newtonsoft.Json.Formatting.Indented,newJsonSerializerSettings{NullValueHandling=NullValueHandling.Ignore}); else returnToJson(t); } ///<summary> ///json格式转换 ///</summary> ///<typeparamname="T"></typeparam> ///<paramname="strJson"></param> ///<returns></returns> publicstaticTFromJson<T>(stringstrJson)whereT:class { if(!strJson.IsNullOrEmpty()) returnJsonConvert.DeserializeObject<T>(strJson); returnnull; } ///<summary> ///功能描述:将List转换为Json ///</summary> ///<paramname="a"></param> ///<returns></returns> publicstaticstringListToJson(IList<object>a) { DataContractJsonSerializerjson=newDataContractJsonSerializer(a.GetType()); stringszJson=""; //序列化 using(MemoryStreamstream=newMemoryStream()) { json.WriteObject(stream,a); szJson=Encoding.UTF8.GetString(stream.ToArray()); } returnszJson; } #endregion #regionProperty ///<summary> ///数据状态 ///</summary> publicstringStatus{get;set;} ///<summary> ///提示信息 ///</summary> publicstringMsg{get;set;} ///<summary> ///回传URL ///</summary> publicstringReUrl{get;set;} ///<summary> ///数据包 ///</summary> publicobjectData{get;set;} #endregion } }
三、JsonSplit:判断字符串是否为Json
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Web; namespaceCommon { ///<summary> ///判断字符串是否为JSON ///</summary> publicclassJsonSplit { privatestaticboolIsJsonStart(refstringjson) { if(!string.IsNullOrEmpty(json)) { json=json.Trim('\r','\n',''); if(json.Length>1) { chars=json[0]; chare=json[json.Length-1]; return(s=='{'&&e=='}')||(s=='['&&e==']'); } } returnfalse; } publicstaticboolIsJson(stringjson) { interrIndex; returnIsJson(json,outerrIndex); } publicstaticboolIsJson(stringjson,outinterrIndex) { errIndex=0; if(IsJsonStart(refjson)) { CharStatecs=newCharState(); charc; for(inti=0;i<json.Length;i++) { c=json[i]; if(SetCharState(c,refcs)&&cs.childrenStart)//设置关键符号状态。 { stringitem=json.Substring(i); interr; intlength=GetValueLength(item,true,outerr); cs.childrenStart=false; if(err>0) { errIndex=i+err; returnfalse; } i=i+length-1; } if(cs.isError) { errIndex=i; returnfalse; } } return!cs.arrayStart&&!cs.jsonStart; } returnfalse; } ///<summary> ///获取值的长度(当Json值嵌套以"{"或"["开头时) ///</summary> privatestaticintGetValueLength(stringjson,boolbreakOnErr,outinterrIndex) { errIndex=0; intlen=0; if(!string.IsNullOrEmpty(json)) { CharStatecs=newCharState(); charc; for(inti=0;i<json.Length;i++) { c=json[i]; if(!SetCharState(c,refcs))//设置关键符号状态。 { if(!cs.jsonStart&&!cs.arrayStart)//json结束,又不是数组,则退出。 { break; } } elseif(cs.childrenStart)//正常字符,值状态下。 { intlength=GetValueLength(json.Substring(i),breakOnErr,outerrIndex);//递归子值,返回一个长度。。。 cs.childrenStart=false; cs.valueStart=0; //cs.state=0; i=i+length-1; } if(breakOnErr&&cs.isError) { errIndex=i; returni; } if(!cs.jsonStart&&!cs.arrayStart)//记录当前结束位置。 { len=i+1;//长度比索引+1 break; } } } returnlen; } ///<summary> ///字符状态 ///</summary> privateclassCharState { internalbooljsonStart=false;//以"{"开始了... internalboolsetDicValue=false;//可以设置字典值了。 internalboolescapeChar=false;//以"\"转义符号开始了 ///<summary> ///数组开始【仅第一开头才算】,值嵌套的以【childrenStart】来标识。 ///</summary> internalboolarrayStart=false;//以"["符号开始了 internalboolchildrenStart=false;//子级嵌套开始了。 ///<summary> ///【0初始状态,或遇到“,”逗号】;【1遇到“:”冒号】 ///</summary> internalintstate=0; ///<summary> ///【-1取值结束】【0未开始】【1无引号开始】【2单引号开始】【3双引号开始】 ///</summary> internalintkeyStart=0; ///<summary> ///【-1取值结束】【0未开始】【1无引号开始】【2单引号开始】【3双引号开始】 ///</summary> internalintvalueStart=0; internalboolisError=false;//是否语法错误。 internalvoidCheckIsError(charc)//只当成一级处理(因为GetLength会递归到每一个子项处理) { if(keyStart>1||valueStart>1) { return; } //示例["aa",{"bbbb":123,"fff","ddd"}] switch(c) { case'{'://[{"[{A}]":[{"[{B}]":3,"m":"C"}]}] isError=jsonStart&&state==0;//重复开始错误同时不是值处理。 break; case'}': isError=!jsonStart||(keyStart!=0&&state==0);//重复结束错误或者提前结束{"aa"}。正常的有{} break; case'[': isError=arrayStart&&state==0;//重复开始错误 break; case']': isError=!arrayStart||jsonStart;//重复开始错误或者Json未结束 break; case'"': case'\'': isError=!(jsonStart||arrayStart);//json或数组开始。 if(!isError) { //重复开始[""",{"""}] isError=(state==0&&keyStart==-1)||(state==1&&valueStart==-1); } if(!isError&&arrayStart&&!jsonStart&&c=='\'')//['aa',{}] { isError=true; } break; case':': isError=!jsonStart||state==1;//重复出现。 break; case',': isError=!(jsonStart||arrayStart);//json或数组开始。 if(!isError) { if(jsonStart) { isError=state==0||(state==1&&valueStart>1);//重复出现。 } elseif(arrayStart)//["aa,][,][{},{}] { isError=keyStart==0&&!setDicValue; } } break; case'': case'\r': case'\n'://["a",\r\n{}] case'\0': case'\t': break; default://值开头。。 isError=(!jsonStart&&!arrayStart)||(state==0&&keyStart==-1)||(valueStart==-1&&state==1);// break; } //if(isError) //{ //} } } ///<summary> ///设置字符状态(返回true则为关键词,返回false则当为普通字符处理) ///</summary> privatestaticboolSetCharState(charc,refCharStatecs) { cs.CheckIsError(c); switch(c) { case'{'://[{"[{A}]":[{"[{B}]":3,"m":"C"}]}] #region大括号 if(cs.keyStart<=0&&cs.valueStart<=0) { cs.keyStart=0; cs.valueStart=0; if(cs.jsonStart&&cs.state==1) { cs.childrenStart=true; } else { cs.state=0; } cs.jsonStart=true;//开始。 returntrue; } #endregion break; case'}': #region大括号结束 if(cs.keyStart<=0&&cs.valueStart<2&&cs.jsonStart) { cs.jsonStart=false;//正常结束。 cs.state=0; cs.keyStart=0; cs.valueStart=0; cs.setDicValue=true; returntrue; } //cs.isError=!cs.jsonStart&&cs.state==0; #endregion break; case'[': #region中括号开始 if(!cs.jsonStart) { cs.arrayStart=true; returntrue; } elseif(cs.jsonStart&&cs.state==1) { cs.childrenStart=true; returntrue; } #endregion break; case']': #region中括号结束 if(cs.arrayStart&&!cs.jsonStart&&cs.keyStart<=2&&cs.valueStart<=0)//[{},333]//这样结束。 { cs.keyStart=0; cs.valueStart=0; cs.arrayStart=false; returntrue; } #endregion break; case'"': case'\'': #region引号 if(cs.jsonStart||cs.arrayStart) { if(cs.state==0)//key阶段,有可能是数组["aa",{}] { if(cs.keyStart<=0) { cs.keyStart=(c=='"'?3:2); returntrue; } elseif((cs.keyStart==2&&c=='\'')||(cs.keyStart==3&&c=='"')) { if(!cs.escapeChar) { cs.keyStart=-1; returntrue; } else { cs.escapeChar=false; } } } elseif(cs.state==1&&cs.jsonStart)//值阶段必须是Json开始了。 { if(cs.valueStart<=0) { cs.valueStart=(c=='"'?3:2); returntrue; } elseif((cs.valueStart==2&&c=='\'')||(cs.valueStart==3&&c=='"')) { if(!cs.escapeChar) { cs.valueStart=-1; returntrue; } else { cs.escapeChar=false; } } } } #endregion break; case':': #region冒号 if(cs.jsonStart&&cs.keyStart<2&&cs.valueStart<2&&cs.state==0) { if(cs.keyStart==1) { cs.keyStart=-1; } cs.state=1; returntrue; } //cs.isError=!cs.jsonStart||(cs.keyStart<2&&cs.valueStart<2&&cs.state==1); #endregion break; case',': #region逗号//["aa",{aa:12,}] if(cs.jsonStart) { if(cs.keyStart<2&&cs.valueStart<2&&cs.state==1) { cs.state=0; cs.keyStart=0; cs.valueStart=0; //if(cs.valueStart==1) //{ //cs.valueStart=0; //} cs.setDicValue=true; returntrue; } } elseif(cs.arrayStart&&cs.keyStart<=2) { cs.keyStart=0; //if(cs.keyStart==1) //{ //cs.keyStart=-1; //} returntrue; } #endregion break; case'': case'\r': case'\n'://["a",\r\n{}] case'\0': case'\t': if(cs.keyStart<=0&&cs.valueStart<=0)//cs.jsonStart&& { returntrue;//跳过空格。 } break; default://值开头。。 if(c=='\\')//转义符号 { if(cs.escapeChar) { cs.escapeChar=false; } else { cs.escapeChar=true; returntrue; } } else { cs.escapeChar=false; } if(cs.jsonStart||cs.arrayStart)//Json或数组开始了。 { if(cs.keyStart<=0&&cs.state==0) { cs.keyStart=1;//无引号的 } elseif(cs.valueStart<=0&&cs.state==1&&cs.jsonStart)//只有Json开始才有值。 { cs.valueStart=1;//无引号的 } } break; } returnfalse; } } }
四、AjaxResult:前台Ajax请求的统一返回结果类
usingSystem.Web.Script.Serialization; namespaceCommon { ///<summary> ///前台Ajax请求的统一返回结果类 ///</summary> publicclassAjaxResult { privateAjaxResult() { } privatebooliserror=false; ///<summary> ///是否产生错误 ///</summary> publicboolIsError{get{returniserror;}} ///<summary> ///错误信息,或者成功信息 ///</summary> publicstringMessage{get;set;} ///<summary> ///成功可能时返回的数据 ///</summary> publicobjectData{get;set;} #regionError publicstaticAjaxResultError() { returnnewAjaxResult() { iserror=true }; } publicstaticAjaxResultError(stringmessage) { returnnewAjaxResult() { iserror=true, Message=message }; } #endregion #regionSuccess publicstaticAjaxResultSuccess() { returnnewAjaxResult() { iserror=false }; } publicstaticAjaxResultSuccess(stringmessage) { returnnewAjaxResult() { iserror=false, Message=message }; } publicstaticAjaxResultSuccess(objectdata) { returnnewAjaxResult() { iserror=false, Data=data }; } publicstaticAjaxResultSuccess(objectdata,stringmessage) { returnnewAjaxResult() { iserror=false, Data=data, Message=message }; } #endregion ///<summary> ///序列化 ///</summary> ///<returns></returns> publicoverridestringToString() { returnnewJavaScriptSerializer().Serialize(this); } } }
常用的一些Json操作类,留着备用,需要的朋友的直接拿去用吧。