Serialization解析
- 添加如下引用
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;
- 序列化
/// <summary>
/// 序列化,对象转化为Json字符串
/// </summary>
/// <param name="jsonObject">待转化的对象</param>
/// <returns>转换后的json字符串</returns>
public static string ToJson(object jsonObject)
{
using (var ms = new MemoryStream())
{
new DataContractJsonSerializer(jsonObject.GetType()).WriteObject(ms, jsonObject);
return Encoding.UTF8.GetString(ms.ToArray());
}
}
- 反序列化
/// <summary>
/// 反序列化,将json字符串转换为指定类型的对象
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="jsonString">待转换的json字符串</param>
/// <returns>返回转换后的对象</returns>
public static T Parse<T>(string jsonString)
{
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms);
}
}
Newtonsoft解析
- 添加引用
通过NuGet引入Newtonsoft,代码中添加如下引用
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
- 反序列化
/// <summary>
/// JSON反序列化:将JSON字符串解析成预定的数据类型
/// </summary>
/// <typeparam name="T">泛型:需要反序列化返回的数据类型</typeparam>
/// <param name="jsonString">输入需要解析的字符内容</param>
/// <returns>返回指定的数据类型</returns>
public static T DeserializeObject<T>(string jsonString)
{
return JsonConvert.DeserializeObject<T>(jsonString);
}
- 序列化
/// <summary>
/// JSON序列化:将JSON对象序列化为字符串
/// </summary>
/// <param name="jsonObject">需要序列化的JSON对象</param>
/// <returns>返回序列化后的JSON字符串</returns>
public static string SerializeObject(object jsonObject)
{
return JsonConvert.SerializeObject(jsonObject);
}
/// <summary>
/// JSON序列化:将JSON对象序列化为字符串,其中可以设置是否自动去除null值
/// </summary>
/// <param name="jsonObject">需要序列化的JSON对象</param>
/// <param name="nullIgnore">是否自动去除null值</param>
/// <returns></returns>
public static string SerializeObject(object jsonObject,bool nullIgnore)
{
if(nullIgnore==true)
return JsonConvert.SerializeObject(jsonObject, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
else
return SerializeObject( jsonObject);
}
- 获取指定节点的值
/// <summary>
/// 获取JSON字符串中指定对象的值
/// </summary>
/// <param name="jsonString">输入需要解析的字符内容</param>
/// <param name="index">对象索引</param>
/// <returns>JSON字符串中指定索引的对象的值</returns>
public static string GetValueFromJArray(string jsonString, int index)
{
JArray jArray = JArray.Parse(jsonString);
return jArray[index].ToString();
}
/// <summary>
/// 获取JSON字符串中指定对象的值
/// </summary>
/// <param name="jsonString">输入需要解析的字符内容</param>
/// <param name="key">对象关键字</param>
/// <returns>JSON字符串中指定关键字的对象的值</returns>
public static string GetValueFromJObject(string jsonString, string key)
{
JObject jsonObj = JObject.Parse(jsonString);
return jsonObj[key].ToString();
}
总结
使用Newtonsoft解析方法,可以解析更加复杂的json, 尤其是一些不规范的json, 或者是动态变化的json, 这样的话,使用Newtonsoft, 就会更加灵活多变。一般情况下,推荐使用该方法。