C# Json解析

作者: ChainZhang | 来源:发表于2017-06-08 13:39 被阅读732次

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

    相关文章

      网友评论

        本文标题:C# Json解析

        本文链接:https://www.haomeiwen.com/subject/tjizfxtx.html