Newtonsoft.Json 复杂结构类型的取值

由于项目中需要取网页上的数据,但是数据时JSON格式的,于是听同事介绍了一个Newtonsoft.Json.dll文件

具体操作如下:

我的字符串类型为:

string str = "{ 'root':{ 'items': [{'Warehouse': '219410', 'City_St': 'Morrow, GA', 'Bales': '264'},{'Warehouse': '240124', 'City_St': 'Climax, GA', 'Bales': '88'},{'Warehouse': '266405', 'City_St': 'Funston, GA', 'Bales': '176'},{'Warehouse': '297005', 'City_St': 'Meigs, GA', 'Bales': '264'},{'Warehouse': '710527', 'City_St': 'Greenville, SC', 'Bales': '440'}] }} ";

 需要循环取出Warehouse的值,这里我们使用了类构造函数

 先定义所需要的类类型

   public class MyList

    {

        public string Warehouse { get; set; }

        public string City_St { get; set; }

    }

    public class Items

    {

        public IList<MyList> items { get; set; }

    }

    public class Root

    {

        public Items root { get; set; }

    }

 然后就可以使用DecodeObject对象转换了

        string str = "{ 'root':{ 'items': [{'Warehouse': '219410', 'City_St': 'Morrow, GA', 'Bales': '264'},{'Warehouse': '240124', 'City_St': 'Climax, GA', 'Bales': '88'},{'Warehouse': '266405', 'City_St': 'Funston, GA', 'Bales': '176'},{'Warehouse': '297005', 'City_St': 'Meigs, GA', 'Bales': '264'},{'Warehouse': '710527', 'City_St': 'Greenville, SC', 'Bales': '440'}] }} ";

        Root T = Utility.JsonUtility.DecodeObject<Root>(str);

        for (int i = 0; i < T.root.items.Count; i++)

        {

            Response.Write(T.root.items[i].Warehouse+"\n");

        }

输出结果如下图

完整代码如下:

View Code
 1 using System;

 2 using System.Collections.Generic;

 3 using System.Linq;

 4 using System.Web;

 5 using System.Web.UI;

 6 using System.Web.UI.WebControls;

 7 using Newtonsoft.Json;

 8 using Newtonsoft.Json.Converters;

 9 using System.IO;

10 

11 public partial class _Default : System.Web.UI.Page

12 {

13     protected void Page_Load(object sender, EventArgs e)

14     {

15         string str = "{ 'root':{ 'items': [{'Warehouse': '219410', 'City_St': 'Morrow, GA', 'Bales': '264'},{'Warehouse': '240124', 'City_St': 'Climax, GA', 'Bales': '88'},{'Warehouse': '266405', 'City_St': 'Funston, GA', 'Bales': '176'},{'Warehouse': '297005', 'City_St': 'Meigs, GA', 'Bales': '264'},{'Warehouse': '710527', 'City_St': 'Greenville, SC', 'Bales': '440'}] }} ";

16         Root T = Utility.JsonUtility.DecodeObject<Root>(str);

17         for (int i = 0; i < T.root.items.Count; i++)

18         {

19             Response.Write(T.root.items[i].Warehouse+"\n");

20         }

21     }

22 

23     public class MyList

24     {

25         public string Warehouse { get; set; }

26         public string City_St { get; set; }

27     }

28     public class Items

29     {

30         public IList<MyList> items { get; set; }

31     }

32     public class Root

33     {

34         public Items root { get; set; }

35     }

36 

37     private static string StringFormat(string str, Type type)

38     {

39         if (type == typeof(string))

40         {

41             str = String2Json(str);

42             str = "\"" + str + "\"";

43         }

44         else if (type == typeof(DateTime))

45         {

46             str = "\"" + str + "\"";

47         }

48         else if (type == typeof(bool))

49         {

50             str = str.ToLower();

51         }

52         return str;

53     } 

54 

55 }

注:项目中的Newtonsoft是有3个版本的.NET2.0 、3.5、 4.0 要引用对应的版本才能找到名称空间;

Utility.cs完整代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Newtonsoft.Json.Converters;

using Newtonsoft.Json;

using System.IO;



/// <summary>

///JsonUtility 的摘要说明

/// </summary>

public class Utility

{

    /// <summary>

    /// Json工具类

    /// </summary>

    public static class JsonUtility

    {

        /// <summary>

        /// 添加时间转换器

        /// </summary>

        /// <param name="serializer"></param>

        private static void AddIsoDateTimeConverter(JsonSerializer serializer)

        {

            IsoDateTimeConverter idtc = new IsoDateTimeConverter();

            //定义时间转化格式

            idtc.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";

            //idtc.DateTimeFormat = "yyyy-MM-dd";

            serializer.Converters.Add(idtc);

        }



        /// <summary>

        /// Json转换配置

        /// </summary>

        /// <param name="serializer"></param>

        private static void SerializerSetting(JsonSerializer serializer)

        {

            serializer.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

            //serializer.NullValueHandling = NullValueHandling.Ignore;

            //serializer.MissingMemberHandling = MissingMemberHandling.Ignore;

            //serializer.DefaultValueHandling = DefaultValueHandling.Ignore;

        }



        /// <summary>

        /// 返回结果消息编码

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="sucess"></param>

        /// <param name="message"></param>

        /// <param name="exMessage"></param>

        /// <param name="data"></param>

        /// <returns></returns>

        public static string ReturnMessage(bool sucess, int total, string message, string exMessage, string data)

        {

            message = message.Replace("'", "").Replace("\"", "").Replace("<", "").Replace(">", "");

            exMessage = exMessage.Replace("'", "").Replace("\"", "").Replace("<", "").Replace(">", "");



            return string.Format("{{success:{0},total:{1},data:{2},message:\"{3}\",exMessage:\"{4}\"}}",

                sucess.ToString().ToLower(), total, data, message, exMessage);

        }



        /// <summary>

        /// 返回失败信息

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="message"></param>

        /// <param name="exMessage"></param>

        /// <returns></returns>

        public static string ReturnFailureMessage(string message, string exMessage)

        {

            return ReturnMessage(false, 0, message, exMessage, "[]");

        }



        /// <summary>

        /// 返回失败信息

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="message"></param>

        /// <param name="exMessage"></param>

        /// <returns></returns>

        public static string ReturnFailureMessageTouch(string message, string exMessage)

        {

            return "{\"success\":\"false\",\"msg\":\"" + exMessage + "\"}";

        }



        /// <summary>

        /// 返回成功信息

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="total"></param>

        /// <param name="message"></param>

        /// <param name="exMessage"></param>

        /// <param name="objList"></param>

        /// <returns></returns>

        public static string ReturnSuccessMessage<T>(int total, string message, string exMessage, List<T> objList)

        {

            string data = ListToJson<T>(objList);

            return ReturnMessage(true, total, message, exMessage, data);

        }



        public static string ReturnSuccessMessageTouch<T>(T obj)

        {

            string data = ObjectToJson<T>(obj);

            return data;

        }



        /// <summary>

        /// 返回成功信息

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="total"></param>

        /// <param name="message"></param>

        /// <param name="exMessage"></param>

        /// <param name="objList"></param>

        /// <returns></returns>

        public static string ReturnSuccessMessage(string message, string exMessage)

        {

            return ReturnMessage(true, 0, message, exMessage, "[]");

        }



        /// <summary>

        /// 返回成功信息

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="total"></param>

        /// <param name="message"></param>

        /// <param name="exMessage"></param>

        /// <param name="objList"></param>

        /// <returns></returns>

        public static string ReturnSuccessMessageTouch(string message, string exMessage)

        {

            return "{\"success\":\"true\",\"msg\":\"" + message + "\"}";

        }







        /// <summary>

        /// 返回成功信息

        /// </summary>

        /// <param name="message"></param>

        /// <param name="exMessage"></param>

        /// <param name="data">JSON 对象</param>

        /// <returns></returns>

        public static string ReturnSuccessMessage(string message, string exMessage, string data)

        {

            return ReturnMessage(true, 0, message, exMessage, "[" + data + "]");

        }



        /// <summary>

        /// 返回成功消息

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="total"></param>

        /// <param name="message"></param>

        /// <param name="exMessage"></param>

        /// <param name="obj"></param>

        /// <returns></returns>

        public static string ReturnSuccessMessage<T>(int total, string message, string exMessage, T obj)

        {

            string data = ObjectToJson<T>(obj);

            return ReturnMessage(true, total, message, exMessage, data);

        }



        /// <summary>

        /// 把对象列表编码为Json数据

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="objList"></param>

        /// <returns></returns>

        public static string ListToJson<T>(List<T> objList)

        {

            JsonSerializer serializer = new JsonSerializer();

            SerializerSetting(serializer);

            AddIsoDateTimeConverter(serializer);



            using (TextWriter sw = new StringWriter())

            using (JsonWriter writer = new JsonTextWriter(sw))

            {

                serializer.Serialize(writer, objList);

                return sw.ToString();

            }

        }



        /// <summary>

        ///  把一个对象编码为Json数据

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="obj"></param>

        /// <returns></returns>

        public static string ObjectToJson<T>(T obj)

        {

            JsonSerializer serializer = new JsonSerializer();

            SerializerSetting(serializer);

            AddIsoDateTimeConverter(serializer);



            using (TextWriter sw = new StringWriter())

            using (JsonWriter writer = new JsonTextWriter(sw))

            {

                serializer.Serialize(writer, obj);

                return sw.ToString();

            }

        }





        /// <summary>

        /// 根据传入的Json数据,解码为对象(一个)

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="data"></param>

        /// <returns></returns>

        public static T DecodeObject<T>(string data)

        {

            JsonSerializer serializer = new JsonSerializer();

            serializer.MissingMemberHandling = MissingMemberHandling.Ignore;

            AddIsoDateTimeConverter(serializer);

            StringReader sr = new StringReader(data);

            return (T)serializer.Deserialize(sr, typeof(T));





        }



        /// <summary>

        /// 功能同DecodeObject

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="data"></param>

        /// <returns></returns>

        public static List<T> DecodeObjectList<T>(string data)

        {

            JsonSerializer serializer = new JsonSerializer();

            serializer.MissingMemberHandling = MissingMemberHandling.Ignore;

            AddIsoDateTimeConverter(serializer);

            StringReader sr = new StringReader(data);

            return (List<T>)serializer.Deserialize(sr, typeof(List<T>));

        }



        public static string EncodeAjaxResponseJson(string jsonString, string callback)

        {

            String responseString = "";

            //判断是否jsonp调用

            if (!String.IsNullOrEmpty(callback))

            {

                //jsonp调用,需要封装回调函数,并返回

                responseString = callback + "(" + jsonString + ")";

            }

            else

            {

                //普通ajax调用,直接返回Json数据

                responseString = jsonString;

            }



            return responseString;

        }



        public static string ExtGridSortInfo(string property, string direction)

        {

            return string.Format("[{{\"property\":\"{0}\",\"direction\":\"{1}\"}}]", property, direction);

        }

    }

}

 

你可能感兴趣的:(json)