您现在的位置是:首页 > 电脑技术查询 > web开发

C#操作json部类数据

编辑:chaxungu时间:2022-10-10 23:23:58分类:web开发

C#操作json类型数据

将对象序列化为 JavaScript 对象表示法 (JSON),并将 JSON 数据反序列化为对象。 此类不能继承。

//  msdn 例子:

[csharp]view plaincopynamespaceSL_DataContractJsonSerializer{publicpartialclassPage:UserControl{publicPage(){InitializeComponent();}//Thisusesaneventhandler,notSLdatabindingvoidOnClick(objectsender,EventArgsargs){txtOutput1.Text="CreateaUserobjectandserializeit.";stringjson=WriteFromObject();txtOutput2.Text=json.ToString();//Displays:{"Age":42,"Name":"Bob"}txtOutput3.Text="DeserializethedatatoaUserobject.";stringjsonString="{'Name':'Bill','Age':53}";UserdeserializedUser=ReadToObject(jsonString);txtOutput4.Text=deserializedUser.Name;//Displays:BilltxtOutput5.Text=deserializedUser.Age.ToString();//Displays:53}//CreateaUserobjectandserializeittoaJSONstream.publicstaticstringWriteFromObject(){//CreateUserobject.Useruser=newUser("Bob",42);//Createastreamtoserializetheobjectto.MemoryStreamms=newMemoryStream();//SerializertheUserobjecttothestream.DataContractJsonSerializerser=newDataContractJsonSerializer(typeof(User));ser.WriteObject(ms,user);byte[]json=ms.ToArray();ms.Close();returnEncoding.UTF8.GetString(json,0,json.Length);}//DeserializeaJSONstreamtoaUserobject.publicstaticUserReadToObject(stringjson){UserdeserializedUser=newUser();MemoryStreamms=newMemoryStream(Encoding.UTF8.GetBytes(json));DataContractJsonSerializerser=newDataContractJsonSerializer(deserializedUser.GetType());deserializedUser=ser.ReadObject(ms)asUser;ms.Close();returndeserializedUser;}}[DataContract]publicclassUser{[DataMember]publicstringName{get;set;}[DataMember]publicintAge{get;set;}publicUser(){}publicUser(stringnewName,intnewAge){Name=newName;Age=newAge;}}}


可以抽象成如下类:

[csharp]view plaincopypublicclassJsonHelper{///<summary>///生成Json格式///</summary>///<typeparamname="T"></typeparam>///<paramname="obj"></param>///<returns></returns>publicstaticstringGetJson<T>(Tobj){DataContractJsonSerializerjson=newDataContractJsonSerializer(obj.GetType());using(MemoryStreamstream=newMemoryStream()){json.WriteObject(stream,obj);stringszJson=Encoding.UTF8.GetString(stream.ToArray());returnszJson;}}///<summary>///获取Json的Model///</summary>///<typeparamname="T"></typeparam>///<paramname="szJson"></param>///<returns></returns>publicstaticTParseFromJson<T>(stringszJson){Tobj=Activator.CreateInstance<T>();using(MemoryStreamms=newMemoryStream(Encoding.UTF8.GetBytes(szJson))){DataContractJsonSerializerserializer=newDataContractJsonSerializer(obj.GetType());return(T)serializer.ReadObject(ms);}}}[csharp]view plaincopy///<summary>///反回JSON数据到前台///</summary>///<paramname="dt">数据表</param>///<returns>JSON字符串</returns>publicstringDataTableToJson(DataTabledt){StringBuilderJsonString=newStringBuilder();if(dt!=null&&dt.Rows.Count>0){JsonString.Append("{");JsonString.Append("\"TableInfo\":[");for(inti=0;i<dt.Rows.Count;i++){JsonString.Append("{");for(intj=0;j<dt.Columns.Count;j++){if(j<dt.Columns.Count-1){JsonString.Append("\""+dt.Columns[j].ColumnName.ToString()+"\":"+"\""+dt.Rows[i][j].ToString()+"\",");}elseif(j==dt.Columns.Count-1){JsonString.Append("\""+dt.Columns[j].ColumnName.ToString()+"\":"+"\""+dt.Rows[i][j].ToString()+"\"");}}if(i==dt.Rows.Count-1){JsonString.Append("}");}else{JsonString.Append("},");}}JsonString.Append("]}");returnJsonString.ToString();}else{returnnull;}}


//还有一种方式操作json类型数据:

[csharp]view plaincopypublicstaticclassJsonTableHelper{///<summary>///返回对象序列化///</summary>///<paramname="obj">源对象</param>///<returns>json数据</returns>publicstaticstringToJson(thisobjectobj){JavaScriptSerializerserialize=newJavaScriptSerializer();returnserialize.Serialize(obj);}///<summary>///控制深度///</summary>///<paramname="obj">源对象</param>///<paramname="recursionDepth">深度</param>///<returns>json数据</returns>publicstaticstringToJson(thisobjectobj,intrecursionDepth){JavaScriptSerializerserialize=newJavaScriptSerializer();serialize.RecursionLimit=recursionDepth;returnserialize.Serialize(obj);}///<summary>///DataTable转为json///</summary>///<paramname="dt">DataTable</param>///<returns>json数据</returns>publicstaticstringToJson(DataTabledt){Dictionary<string,object>dic=newDictionary<string,object>();intindex=0;foreach(DataRowdrindt.Rows){Dictionary<string,object>result=newDictionary<string,object>();foreach(DataColumndcindt.Columns){result.Add(dc.ColumnName,dr[dc].ToString());}dic.Add(index.ToString(),result);index++;}returnToJson(dic);}}