您好,欢迎来到钮旅网。
搜索
您的当前位置:首页C#解析json的两种方式

C#解析json的两种方式

来源:钮旅网
C#解析json的两种⽅式

C#中Json转换主要使⽤的⼏种⽅法!

这篇主要介绍2、4。第三种⽅法使⽤的⽐较局限,所以我没有深⼊学习。第⼆种⽅法

  我使⽤⽐较多的⽅式,这个⽅法是.NET内置的,使⽤起来⽐较⽅便A、利⽤serializer获取json的泛型对象

利⽤Dictionary接收转换完的json对象,然后⽤查询泛型的指令即可提取想要的json对象。

string JsonData = “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”;JavaScriptSerializer serializer = new JavaScriptSerializer();

Dictionary json = (Dictionary)serializer.DeserializeObject(JsonData);string firstKey = json.ElementAt(0).Key;string secondKey = json.ElementAt(1).Key;

当然还有很多其他数据类型,所以要灵活运⽤转换。

object[] jsonInnerObj = (object[])serializer.DeserializeObject(jsonList);//强制类型转化

Dictionary jsonLast = (Dictionary)jsonInnerObj[i];

B、利⽤类去接收json对象

public class Info {

public List Title { get; set; } //属性的名字,必须与json格式字符串中的\"key\"值⼀样。 public string PreSum { get; set; }

public List CalculateSum { get; set; }//数组处理 public string[] Float { get; set; }//数组处理 public List TableCell;//泛型处理 }

根据json对象的格式,创建类。这⾥需要注意,数组和泛型的区别,数组是[123,123,123]类型的数据,⽽泛型是[{“a”:”a”,”b”:”b”},{“a”:”a”,”b”:”b”},{“a”:”a”,”b”:”b”}]类型的数据。

泛型如果向继续进⾏读取,那么还需要针对⾥⾯的数据再次创建⼀个类与之对应。之后在控制页⾯中使⽤

string json = form[\"TextArea1\"];

JavaScriptSerializer js = new JavaScriptSerializer();//实例化⼀个能够序列化数据的类Info list = js.Deserialize(json); //将json数据转化为对象类型并赋值给listList title = list.Title;string preSum = list.PreSum ;

List calculateSum=list.CalculateSum;string[] Float = list.Float;

List tableList = list.TableCell;

C、反序列化

反序列化较为简单,如果是泛型,那么直接存⼊⼀个键值之后对应泛型即可,c#会⾃动转存为json格式。

return Json(new { TotalItem = totalItem, Page = page, TotalPage = pageCountInt, List = _viewModel.InfoListVM }, JsonRequestBehavior.AllowGet);

第四种⽅法、⽐较通⽤,⽽且可以使⽤linq的,所以⽐较推荐!

通常可以使⽤JObject, JsonReader, JsonWriter处理。这种⽅式最通⽤,最灵活,也可以随时修改。4.2 详细内容

4.2.0 添加命名空间:using Newtonsoft.Json;4.2.1 使⽤JsonReader读Json字符串

string jsonText = @\"{\"\"input\"\" : \"\"value\"\

JsonReader reader = new JsonTextReader(new StringReader(jsonText));while (reader.Read()){

Console.WriteLine(reader.TokenType + \"\\\" + reader.ValueType + \"\\\" + reader.Value+\"\\r\\n\");}

Console.ReadKey();

4.2.2 使⽤JsonWriter写字符串

StringWriter sw = new StringWriter();

JsonWriter writer = new JsonTextWriter(sw);writer.WriteStartObject();

writer.WritePropertyName(\"input\");writer.WriteValue(\"value\");

writer.WritePropertyName(\"output\");writer.WriteValue(\"result\");writer.WriteEndObject();writer.Flush();

string jsonText2 = sw.GetStringBuilder().ToString();Console.WriteLine(jsonText2);Console.ReadKey();

4.2.3 使⽤JObject读写字符串

4.2.3.1 添加命名空间:using Newtonsoft.Json.Linq;

JObject jo = JObject.Parse(jsonText);

string[] values = jo.Properties().Select(item => item.Value.ToString()).ToArray();4.2.4 使⽤JsonSerializer读写对象(基于JsonWriter与JsonReader)4.2.4.1数组型数据

string jsonArrayText1 = \"[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]\";

JArray ja = (JArray)JsonConvert.DeserializeObject(jsonArrayText1);string ja1a = ja[1][\"a\"].ToString();//或者

JObject o = (JObject)ja[1];string oa = o[\"a\"].ToString();

4.2.4.2嵌套格式

string jsonText3 = \"{\\\"beijing\\\":{\\\"zone\\\":\\\"海淀\\\JObject jo1 = (JObject)JsonConvert.DeserializeObject(jsonText3);string zone = jo1[\"beijing\"][\"zone\"].ToString();

string zone_en = jo1[\"beijing\"][\"zone_en\"].ToString();

4.2.4.3 ⾃定义使⽤1.辅助类

class Project{

public string Input { get; set; }public string Output { get; set; }}

2.使⽤

Project p = new Project() { Input = \"stone\ JsonSerializer serializer = new JsonSerializer(); StringWriter sw1 = new StringWriter();

serializer.Serialize(new JsonTextWriter(sw), p);

Console.WriteLine(sw.GetStringBuilder().ToString());

StringReader sr = new StringReader(@\"{\"\"Input\"\":\"\"stone\"\ Project p1 = (Project)serializer.Deserialize(new JsonTextReader(sr), typeof(Project)); Console.WriteLine(p1.Input + \"=>\" + p1.Output); Console.ReadKey();

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- niushuan.com 版权所有 赣ICP备2024042780号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务