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常用操作

    前言 最近初接触C#语言,发现JSON解析这块和JAVA差异过大,所以针对简单的JSON操作,如String、in...

  • 「MojoUnityJson」C#实现超级简单和高效的JSON解

    MojoUnityJson是使用C#实现的JSON解析器 ,算法思路来自于游戏引擎Mojoc的C语言实现Json....

  • C# Json解析

    Serialization解析 添加如下引用 序列化 反序列化 Newtonsoft解析 添加引用通过NuGet引...

  • c# json 解析

    json结构{参数名1:参数值1,参数名2:参数值2,......} json数组结构 [{json1},{jso...

  • c#解析json

    最近需要在.net webserver中get请求高德地图的url,地理编码获取到地址的经纬度,高德返回的是Jso...

  • c#解析json

    json是一种通用的文本序列,有其固定的格式。 json的使用前必须转化为实体类。转化方法是在线转换。网址:htt...

  • JSON Serialization/Deserializati

    因为对C#不是特别熟悉,但是最近写个c#的demo,需要对获取的的json字符串进行解析,开始使用Newtonso...

  • 有用的vs code插件

    Paste JSON as CodeCopy JSON, paste as Go, TypeScript, C#,...

  • 跟诸子学游戏 Unity3d小技巧(杂项)

    1:C# https://www.nuget.org/ 第三方库 上面查找常用的类库,如json解析库litjso...

  • JSON

    JSON解析(反序列化) JSON解析(序列化) JSON解析补充

网友评论

    本文标题:C# Json解析

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