ABP JsonExtensions 内部实现源码
调用方式:
str.FromJsonString<List<Guid>>();//字符串转集合
list.ToJsonString();//集合转字符串
using JetBrains.Annotations;
using Newtonsoft.Json;
using System;
namespace Abp.Json
{
public static class JsonExtensions
{
/// <summary>
/// Converts given object to JSON string.
/// </summary>
/// <returns></returns>
public static string ToJsonString(this object obj, bool camelCase = false, bool indented = false)
{
var settings = new JsonSerializerSettings();
if (camelCase)
{
settings.ContractResolver = new AbpCamelCasePropertyNamesContractResolver();
}
else
{
settings.ContractResolver = new AbpContractResolver();
}
if (indented)
{
settings.Formatting = Formatting.Indented;
}
return ToJsonString(obj, settings);
}
/// <summary>
/// Converts given object to JSON string using custom <see cref="JsonSerializerSettings"/>.
/// </summary>
/// <returns></returns>
public static string ToJsonString(this object obj, JsonSerializerSettings settings)
{
return obj != null
? JsonConvert.SerializeObject(obj, settings)
: default(string);
}
/// <summary>
/// Returns deserialized string using default <see cref="JsonSerializerSettings"/>
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <returns></returns>
public static T FromJsonString<T>(this string value)
{
return value.FromJsonString<T>(new JsonSerializerSettings());
}
/// <summary>
/// Returns deserialized string using custom <see cref="JsonSerializerSettings"/>
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <param name="settings"></param>
/// <returns></returns>
public static T FromJsonString<T>(this string value, JsonSerializerSettings settings)
{
return value != null
? JsonConvert.DeserializeObject<T>(value, settings)
: default(T);
}
/// <summary>
/// Returns deserialized string using explicit <see cref="Type"/> and custom <see cref="JsonSerializerSettings"/>
/// </summary>
/// <param name="value"></param>
/// <param name="type"></param>
/// <param name="settings"></param>
/// <returns></returns>
public static object FromJsonString(this string value, [NotNull] Type type, JsonSerializerSettings settings)
{
if (type == null)
{
throw new ArgumentNullException(nameof(type));
}
return value != null
? JsonConvert.DeserializeObject(value, type, settings)
: null;
}
}
}
可以看到内部实现就是对 Newtonsoft.Json 的简单封装,除了判空以外几乎没有做任何处理。