对象工具-ObjectUtil
# 由来
在我们的日常使用中,有些方法是针对Object通用的,这些方法不区分何种对象,针对这些方法,EasyTool
封装为ObjectUtil。
下面是ObjectUtil
工具类的一些方法列表:
IsNull
:检查对象是否为 null。IsNotNull
:检查对象是否不为 null。IsNullOrEmpty
:检查对象是否为空(null 或者 空字符串或空白字符)。IsNotNullOrEmpty
:检查对象是否不为空(非 null 且 非空字符串 或者 非空集合)。Equals
:检查两个对象是否相等。GetTypeName
:获取对象的类型名称。Convert<T>
:将对象转换为指定类型。Convert
:将对象转换为指定类型。GetProperties
:获取对象的属性列表。GetPropertyValue
:获取对象的属性值。SetPropertyValue
:设置对象的属性值。GetFields
:获取对象的字段列表。GetFieldValue
:获取对象的字段值。SetFieldValue
:设置对象的字段值。GetMethods
:获取对象的方法列表。ImplementsInterface
:判断对象是否实现了指定接口。CreateInstance
:创建指定类型的实例。IsInstanceOfType
:判断对象是否为指定类型的实例。EncryptPropertyValue
:对象属性或字段值的加密或解密。DecryptPropertyValue
:对象属性或字段值的解密。ProcessPropertyValue
:在对象属性或字段上进行特定的处理。ToJson
:将对象序列化为 JSON 字符串。FromJson<T>
:将 JSON 字符串反序列化为对象。ToXml
:将对象序列化为 XML 字符串。FromXml<T>
:将 XML 字符串反序列化为对象。ToDictionary
:将对象转换为字典。FromDictionary<T>
:将字典转换为对象。Compare
:比较两个对象的差异(属性值或字段值不同)。GetHashCode
:获取对象的哈希码。DeepClone<T>
:深拷贝对象。IsValueType
:判断对象是否为值类型。ToKeyValuePairs
:将对象转换为键值对集合。DeepCopy
:实现深度复制对象CopyProperties
:将源对象的属性复制到目标对象中GetType
:获取指定类型的 Type 对象GetMembers
:获取类型的所有成员信息,包括字段、属性、方法和事件等。GetProperties
:获取类型的所有属性信息。GetFields
:获取类型的所有字段信息。GetProperty
:获取指定名称的属性信息。GetField
:获取指定名称的字段信息。GetMethod
:获取指定名称的方法信息。InvokeMethod
:调用对象的指定方法。CreateInstance
:创建指定类型的实例。IsSubclassOf
:判断指定类型是否派生自指定的基类或接口。GetSubclassesOf
:获取指定类型的所有派生类型。GetInterfaces
:获取指定类型实现的所有接口类型。GetAssemblyQualifiedName
:获取指定类型的程序集限定名。GetDefault
: 获取指定类型的默认值。IsDefaultValue
: 判断对象是否是其类型的默认值。IsNullable
: 判断指定类型是否是可空类型。GetNullableType
: 获取可空类型的基础类型。GetUnderlyingType
: 获取可空类型或枚举类型的基础类型。IsSimpleType
: 判断指定类型是否是简单类型。IsNumericType
: 判断指定类型是否是数字类型。IsBooleanType
: 判断指定类型是否是布尔类型。IsDateTimeType
: 判断指定类型是否是日期时间类型。IsEnumType
: 判断指定类型是否是枚举类型。IsEnumerableType
: 判断指定类型是否是集合类型。ToDynamic
: 将对象转换为动态扩展对象。SerializeToJson
: 将对象序列化为 JSON 字符串。DeserializeFromJson
: 将 JSON 字符串反序列化为指定类型的对象。SerializeToXml
: 将对象序列化为 XML 字符串。DeserializeFromXml
: 将 XML 字符串反序列化为指定类型的对象。SerializeToBinary
: 将对象序列化为二进制数据。DeserializeFromBinary
: 将二进制数据反序列化为指定类型的对象。
这个工具类提供了一组操作对象的方法,涵盖了对象的基本操作、序列化和反序列化、加密和解密、拷贝和转换、排序和比较等等。每个方法都有详细的注释,你可以根据自己的需要选择使用。需要注意的是,由于不同对象的实现方式和数据结构不同,有些方法可能不能通用,需要进行适当的修改和定制化。
# EasyTool.ObjectUtil 类
静态工具类 ObjectUtil,提供了一组操作对象的方法,主要包括以下功能:
- 对象的基本操作:包括检查对象是否为 null、检查对象是否为空、检查对象是否相等、获取对象的类型名称等。
- 对象的属性和字段操作:包括获取和设置对象的属性值和字段值,以及对属性和字段进行加密和解密、特定处理等操作。
- 对象的序列化和反序列化:提供将对象序列化为 JSON 或 XML 字符串,以及将 JSON 或 XML 字符串反序列化为对象的方法。
- 对象的拷贝和转换:包括将对象转换为指定类型、将对象转换为字典、将字典转换为对象、进行深拷贝等操作。
- 对象的比较和排序:提供比较两个对象的差异、获取对象的哈希码、将对象转换为键值对集合等方法,方便进行对象的比较和排序。
# IsNull-检查对象是否为 null
/// <summary>
/// 检查对象是否为 null
/// </summary>
public static bool IsNull(object obj)
# IsNotNull-检查对象是否不为 null
/// <summary>
/// 检查对象是否不为 null
/// </summary>
public static bool IsNotNull(object obj)
# IsNullOrEmpty-检查对象是否为空(null 或者 空字符串或空白字符)
/// <summary>
/// 检查对象是否为空(null 或者 空字符串或空白字符)
/// </summary>
public static bool IsNullOrEmpty(object obj)
# IsNotNullOrEmpty-检查对象是否不为空(非 null 且 非空字符串 或者 非空集合)
/// <summary>
/// 检查对象是否不为空(非 null 且 非空字符串 或者 非空集合)
/// </summary>
public static bool IsNotNullOrEmpty(object obj)
# Equals-检查两个对象是否相等
/// <summary>
/// 检查两个对象是否相等
/// </summary>
public static bool Equals(object obj1, object obj2)
# GetTypeName-获取对象的类型名称
/// <summary>
/// 获取对象的类型名称
/// </summary>
public static string GetTypeName(object obj)
# Convert-将对象转换为指定类型
/// <summary>
/// 将对象转换为指定类型
/// </summary>
public static T Convert<T>(object obj)
/// <summary>
/// 将对象转换为指定类型
/// </summary>
public static object Convert(object obj, Type targetType)
# GetProperties-获取对象的属性列表
/// <summary>
/// 获取对象的属性列表
/// </summary>
public static IEnumerable<PropertyInfo> GetProperties(object obj)
# GetPropertyValue-获取对象的属性值
/// <summary>
/// 获取对象的属性值
/// </summary>
public static object GetPropertyValue(object obj, string propertyName)
# SetPropertyValue-设置对象的属性值
/// <summary>
/// 设置对象的属性值
/// </summary>
public static void SetPropertyValue(object obj, string propertyName, object value)
# GetFields-获取对象的字段列表
/// <summary>
/// 获取对象的字段列表
/// </summary>
public static IEnumerable<FieldInfo> GetFields(object obj)
# GetFieldValue-获取对象的字段值
/// <summary>
/// 获取对象的字段值
/// </summary>
public static object GetFieldValue(object obj, string fieldName)
# SetFieldValue-设置对象的字段值
/// <summary>
/// 设置对象的字段值
/// </summary>
public static void SetFieldValue(object obj, string fieldName, object value)
# GetMethods-获取对象的方法列表
/// <summary>
/// 获取对象的方法列表
/// </summary>
public static IEnumerable<MethodInfo> GetMethods(object obj)
# ImplementsInterface-判断对象是否实现了指定接口
/// <summary>
/// 判断对象是否实现了指定接口
/// </summary>
public static bool ImplementsInterface(object obj, Type interfaceType)
# IsInstanceOfType-判断对象是否为指定类型的实例
/// <summary>
/// 判断对象是否为指定类型的实例
/// </summary>
public static bool IsInstanceOfType(object obj, Type targetType)
# EncryptPropertyValue-对象属性或字段值的加密
/// <summary>
/// 对象属性或字段值的加密
/// </summary>
public static void EncryptPropertyValue(object obj, string propertyName, Func<string, string> encryptFunc)
# DecryptPropertyValue-对象属性或字段值的解密
/// <summary>
/// 对象属性或字段值的解密
/// </summary>
public static void DecryptPropertyValue(object obj, string propertyName, Func<string, string> decryptFunc)
# ProcessPropertyValue-在对象属性或字段上进行特定的处理
/// <summary>
/// 在对象属性或字段上进行特定的处理
/// </summary>
public static void ProcessPropertyValue(object obj, string propertyName, Action<object> processAction)
# ToJson-将对象序列化为 JSON 字符串
/// <summary>
/// 将对象序列化为 JSON 字符串
/// </summary>
public static string ToJson(object obj)
# FromJson-将 JSON 字符串反序列化为对象
/// <summary>
/// 将 JSON 字符串反序列化为对象
/// </summary>
public static T FromJson<T>(string json)
# ToXml-将对象序列化为 XML 字符串
/// <summary>
/// 将对象序列化为 XML 字符串
/// </summary>
public static string ToXml(object obj)
# FromXml-将 XML 字符串反序列化为对象
/// <summary>
/// 将 XML 字符串反序列化为对象
/// </summary>
public static T FromXml<T>(string xml)
# ToDictionary-将对象转换为字典
/// <summary>
/// 将对象转换为字典
/// </summary>
public static Dictionary<string, object> ToDictionary(object obj)
# FromDictionary-将字典转换为对象
/// <summary>
/// 将字典转换为对象
/// </summary>
public static T FromDictionary<T>(Dictionary<string, object> dictionary) where T : new()
# Compare-比较两个对象的差异(属性值或字段值不同)
/// <summary>
/// 比较两个对象的差异(属性值或字段值不同)
/// </summary>
public static IEnumerable<string> Compare(object obj1, object obj2)
# GetHashCode-获取对象的哈希码
/// <summary>
/// 获取对象的哈希码
/// </summary>
public static int GetHashCode(object obj)
# DeepClone-深拷贝对象
/// <summary>
/// 深拷贝对象
/// </summary>
public static T DeepClone<T>(T obj)
# IsValueType-判断对象是否为值类型
/// <summary>
/// 判断对象是否为值类型
/// </summary>
public static bool IsValueType(object obj)
# ToKeyValuePairs-将对象转换为键值对集合
/// <summary>
/// 将对象转换为键值对集合
/// </summary>
public static IEnumerable<KeyValuePair<string, object>> ToKeyValuePairs(object obj)
# 使用示例
以下示例演示了如何使用 ObjectUtil
工具类进行对象的序列化、反序列化和比较操作。首先定义了一个 Person
类和一个 Address
类,然后创建了一个 Person
对象并进行操作。将对象转换为 JSON
字符串,然后再将 JSON
字符串反序列化为对象,最后比较两个对象的差异并输出结果。这个示例仅仅是 ObjectUtil
工具类的简单使用,更多功能请参考工具类的注释和方法说明。
using System;
using System.Collections.Generic;
namespace ObjectUtilDemo
{
class Program
{
static void Main(string[] args)
{
// 示例对象
Person person = new Person
{
Name = "Tom",
Age = 18,
Email = "tom@test.com",
Address = new Address
{
Province = "Guangdong",
City = "Shenzhen",
Street = "Futian"
}
};
// 将对象转换为 JSON 字符串
string json = ObjectUtil.ToJson(person);
Console.WriteLine($"将对象转换为 JSON 字符串:\n{json}\n");
// 将 JSON 字符串反序列化为对象
Person deserializedPerson = ObjectUtil.FromJson<Person>(json);
Console.WriteLine("将 JSON 字符串反序列化为对象:");
Console.WriteLine($"Name: {deserializedPerson.Name}");
Console.WriteLine($"Age: {deserializedPerson.Age}");
Console.WriteLine($"Email: {deserializedPerson.Email}");
Console.WriteLine($"Province: {deserializedPerson.Address.Province}");
Console.WriteLine($"City: {deserializedPerson.Address.City}");
Console.WriteLine($"Street: {deserializedPerson.Address.Street}\n");
// 比较两个对象的差异
Person anotherPerson = new Person
{
Name = "Tom",
Age = 20,
Email = "tom@test.com",
Address = new Address
{
Province = "Guangdong",
City = "Shenzhen",
Street = "Futian"
}
};
IEnumerable<string> differences = ObjectUtil.Compare(person, anotherPerson);
Console.WriteLine("比较两个对象的差异:");
foreach (string difference in differences)
{
Console.WriteLine(difference);
}
}
}
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
public Address Address { get; set; }
}
class Address
{
public string Province { get; set; }
public string City { get; set; }
public string Street { get; set; }
}
}
# 参考资料
- MSDN 官方文档:https://docs.microsoft.com/zh-cn/dotnet/api/
- C# 之道网站:https://www.cnblogs.com/artech/p/- csharp-object-manipulation-utilities.html
- C# Guide 网站:https://docs.microsoft.com/zh-cn/dotnet/csharp/
- GitHub 上的 ObjectUtil 工具类:https://github.com/linweijun/ObjectUtil
以上资料涵盖了 C# 中的对象操作、序列化和反序列化、加密和解密、拷贝和转换等方面的内容,对于 ObjectUtil 工具类的实现和使用都提供了很好的参考。
上次更新: 2023/04/26, 22:10:06