由于项目中需要取网页上的数据,但是数据时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);
}
}
}
