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);
        }
    }
}
原文地址:https://www.cnblogs.com/wjmo520/p/2799926.html