C# Json解析

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,491评论 19 139
  • 1 反射机制&JSON解析 【 Java的高级特性:反射机制 publicclass Student { pu...
    征程_Journey阅读 4,451评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,956评论 18 399
  • 一、iOS 4种JSON数据解析方法详解 2013年09月10日⁄ 综合⁄ 共 9124字⁄ 字号小中大⁄评论关闭...
    lilinjianshu阅读 6,418评论 0 2
  • 从呱呱落地,到蹒跚前行, 是她将我们一步一步拉扯大 孕育我们的生命 带我们进入学识的殿堂 教我们做人的道理 陪我们...
    白若洛阅读 1,150评论 0 2