zoukankan      html  css  js  c++  java
  • C#解析json的两种方式

     

     

    C#中Json转换主要使用的几种方法!

    这篇主要介绍2、4。第三种方法使用的比较局限,所以我没有深入学习。

    第二种方法

      我使用比较多的方式,这个方法是.NET内置的,使用起来比较方便

    A、利用serializer获取json的泛型对象

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

    string JsonData = “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”;
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    Dictionary<string,object> json = (Dictionary<string, object>)serializer.DeserializeObject(JsonData);
    string firstKey = json.ElementAt(0).Key;
    string secondKey = json.ElementAt(1).Key;

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

    object[] jsonInnerObj = (object[])serializer.DeserializeObject(jsonList);
    //强制类型转化
    Dictionary<string, object> jsonLast = (Dictionary<string, object>)jsonInnerObj[i]; 

    B、利用类去接收json对象

    public class Info
        {
            public List<TitleProperty> Title { get; set; } //属性的名字,必须与json格式字符串中的"key"值一样。
            public string PreSum { get; set; }
            public List<CalculateFeature> CalculateSum { get; set; }//数组处理
            public string[] Float { get; set; }//数组处理
            public List<RowCells> 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<Info>(json); //将json数据转化为对象类型并赋值给list
    List<TitleProperty> title = list.Title;
    string preSum = list.PreSum ;
    List<CalculateFeature> calculateSum=list.CalculateSum;
    string[] Float = list.Float;
    List<RowCells> tableList = list.TableCell;

    C、反序列化

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

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

    第四种方法、比较通用,而且可以使用linq的,所以比较推荐!

    4.1 使用类库Newtonsoft.Json(下载地址http://json.codeplex.com/)。下载后加入工程就能用。

    通常可以使用JObject, JsonReader, JsonWriter处理。这种方式最通用,最灵活,也可以随时修改。

    4.2 详细内容

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

    4.2.1 使用JsonReader读Json字符串

    string jsonText = @"{""input"" : ""value"", ""output"" : ""result""}";
    JsonReader reader = new JsonTextReader(new StringReader(jsonText));
    while (reader.Read())
    {
    Console.WriteLine(reader.TokenType + "		" + reader.ValueType + "		" + reader.Value+"
    ");
    }
    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":"海淀","zone_en":"haidian"}}";
    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", Output = "gold" };
                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"", ""Output"":""gold""}");
                Project p1 = (Project)serializer.Deserialize(new JsonTextReader(sr), typeof(Project));
                Console.WriteLine(p1.Input + "=>" + p1.Output);
                Console.ReadKey();

    关于Newtonsoft.Json高级用法 http://www.cnblogs.com/yanweidie/p/4605212.html

  • 相关阅读:
    1093 Count PAT's(25 分)
    1089 Insert or Merge(25 分)
    1088 Rational Arithmetic(20 分)
    1081 Rational Sum(20 分)
    1069 The Black Hole of Numbers(20 分)
    1059 Prime Factors(25 分)
    1050 String Subtraction (20)
    根据生日计算员工年龄
    动态获取当前日期和时间
    对计数结果进行4舍5入
  • 原文地址:https://www.cnblogs.com/cfas/p/11080203.html
Copyright © 2011-2022 走看看