程序员

C# Json解析

2017-06-08  本文已影响732人  ChainZhang

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解析

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, 就会更加灵活多变。一般情况下,推荐使用该方法。

上一篇下一篇

猜你喜欢

热点阅读