/// <summary>
/// object Json转换方法扩展
/// </summary>
public static class JsonExtension
{
/// <summary>
/// object转成Json字符串
/// </summary>
/// <param name="data">object 需转换的对象</param>
/// <returns>转换后的Json字符串</returns>
public static string JsonToString(this object data)
{
return JsonConvert.SerializeObject(data);
}
/// <summary>
/// Json字符串转换成对象
/// </summary>
/// <typeparam name="T">转成对象的类型</typeparam>
/// <param name="str">用于转换的Json字符串</param>
/// <returns>转成后的对象</returns>
public static T JsonFromString<T>(this string str)
{
return JsonConvert.DeserializeObject<T>(str);
}
/// <summary>
/// Json 格式化
/// </summary>
/// <param name="jsonStr">json自负床</param>
/// <returns>格式化后的Json自负床</returns>
public static string JsonFormatOut(this string jsonStr)
{
//格式化json字符串
JsonSerializer serializer = new JsonSerializer();
TextReader tr = new StringReader(jsonStr);
JsonTextReader jtr = new JsonTextReader(tr);
object obj = serializer.Deserialize(jtr);
if (obj != null)
{
StringWriter textWriter = new StringWriter();
JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
{
Formatting = Formatting.Indented,
Indentation = 4,
IndentChar = ' '
};
serializer.Serialize(jsonWriter, obj);
return textWriter.ToString();
}
else
{
return jsonStr;
}
}
/// <summary>
/// 通过Json数据中的key获取对应的Value 重名的获取第一个
/// </summary>
/// <typeparam name="T">所获取数据的数据类型</typeparam>
/// <param name="jObject">JObject对象</param>
/// <param name="key">key</param>
/// <returns>key对应的Value 没有找到时返回null</returns>
public static T GetValueByKey<T>(this JObject jObject, string key)
{
var tempValue = jObject.GetValue(key);
if (tempValue != null)
{
return tempValue.Value<T>();
}
else
{
var enumerator = jObject.GetEnumerator();
while (enumerator.MoveNext())
{
if (enumerator.Current.Value.HasValues)
{
T tempTValue = GetValueByKey<T>(enumerator.Current.Value as JObject, key);
if (tempTValue != null)
{
return tempTValue;
}
}
}
}
return default(T);
}
/// <summary>
/// 通过描述路径获取对应的Value
/// </summary>
/// <typeparam name="T">所获取数据的数据类型</typeparam>
/// <param name="jObject">JObject对象</param>
/// <param name="path">描述路径,key之间通过分割符进行分割</param>
/// <param name="separator">路径描述中key分割符</param>
/// <returns>描述路径对的值</returns>
public static T GetValueByPath<T>(this JObject jObject, string path, params char[] separator)
{
if (!string.IsNullOrEmpty(path))
{
string[] keys = path.Split(separator);
JObject ptrJObject = jObject;
int count = keys.Count();
for (int index = 0; index < count; ++index)
{
if (ptrJObject != null)
{
if (index == count - 1)
{
return ptrJObject.GetValue(keys[index]).Value<T>();
}
ptrJObject = ptrJObject.GetValue(keys[index]).Value<JObject>();
}
}
}
return default(T);
}
/// <summary>
/// 通过描述路径获取对应的Value
/// </summary>
/// <typeparam name="T">所获取数据的数据类型</typeparam>
/// <param name="jObject">JObject对象</param>
/// <param name="path">描述路径,key之间通过"."进行分割</param>
/// <returns>描述路径对的值</returns>
public static T GetValueByPath<T>(this JObject jObject, string path)
{
return GetValueByPath<T>(jObject, path, '.');
}
}
转载于:https://my.oschina.net/sanyuni/blog/2873789