ObjectUtils 1.2.3.4
.NET Standard 1.3
This package targets .NET Standard 1.3. The package is compatible with this framework or higher.
.NET Framework 4.0
This package targets .NET Framework 4.0. The package is compatible with this framework or higher.
dotnet add package ObjectUtils --version 1.2.3.4
NuGet\Install-Package ObjectUtils -Version 1.2.3.4
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ObjectUtils" Version="1.2.3.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ObjectUtils --version 1.2.3.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: ObjectUtils, 1.2.3.4"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install ObjectUtils as a Cake Addin #addin nuget:?package=ObjectUtils&version=1.2.3.4 // Install ObjectUtils as a Cake Tool #tool nuget:?package=ObjectUtils&version=1.2.3.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
ObjectUtils
介绍
ObjectUtils包含一组工具,用于提高编程效率。目前包含的工具有:
工具 | 简介 | 完成情况 |
---|---|---|
ObjectMapper | 对象映射工具,使用表达式树实现,支持映射配置,采用深克隆模式。效率略逊于TinyMapper,优点是不用先Bind需要映射的类型 | 已完成 |
ObjectComparator | 对象比较工具,使用表达式树实现,支持映射配置,会忽略没有匹配的字段 | 已完成 |
软件架构
目录结构说明:
目录 | 说明 | 公开类型/接口 |
---|---|---|
Comparator | ObjectComparator实现 | ObjectComparator |
Config | 对象映射配置 | IMapConfig<TSource, TTarget>:配置接口 <br/>ObjectMapConfigurator:配置入口 |
Core | 类型定义、管理类 | -- |
Extensions | 扩展方法 | ObjectMapperExtensions <br/>ObjectComparatorExtensions |
Mapper | ObjectMapper实现 | ObjectMapper |
Util | 工具类 | -- |
安装教程
引用本项目或生成的Dll即可,是否上传到Nuget待定。
使用说明
使用方法可以参考TestProject中的Usage:
// 测试类定义
public class ClassA
{
public string Name { get; set; }
public int Age;
public int Tall;
public bool IgnoreField;
}
public class ClassB
{
public string Title { get; set; }
public long longAge;
public int Tall;
public string IgnoreField;
}
// 使用方法
public class Usage
{
public Usage()
{
// 配置映射关系,使配置对ObjectMapper和ObjectComparator都生效
ObjectMapConfigurator.Config<ClassA, ClassB>(config =>
{
// 不同名字段的映射
// Tall字段名称相同,不用配置
config.Map(s => s.Name, t => t.Title);
// 这个规则适用于所有的字段
config.MapRule(s => $"long{s}");
// 忽略的字段或属性
//config.IgnoreSource(s => s.IgnoreField);
config.IgnoreTarget(t => t.IgnoreField);
});
}
// ObjectMapper 示例
[Fact]
public void ObjectMapperUsage()
{
var a = new ClassA
{
Age = 30,
IgnoreField = true,
Name = "Jack",
Tall = 180,
};
// 将a对象映射为b对象
var b = ObjectMapper.Map<ClassA, ClassB>(a);
// 或者使用扩展方法
//var b = a.Map<ClassA, ClassB>();
// 克隆对象,这是一个扩展方法
var copied = b.Clone();
Assert.NotNull(copied);
Assert.Equal(a.Age, copied.longAge);
Assert.Equal(a.Name, copied.Title);
Assert.Equal(a.Tall, copied.Tall);
Assert.Null(copied.IgnoreField);
}
// ObjectComparator 示例
[Fact]
public void ObjectComparatorUsage()
{
var a = new ClassA
{
Age = 30,
IgnoreField = true,
Name = "Jack",
Tall = 180,
};
var b = new ClassB
{
longAge = 29,
IgnoreField = false.ToString(),
Title = "Jack",
Tall = 178,
};
var result = ObjectComparator.Equals(a, b);
//var result = a.AreEquals(b);
Assert.False(result);
}
[Fact]
public void ObjectComparatorUsage2()
{
var a = new ClassA
{
Age = 30,
IgnoreField = true,
Name = "Jack",
Tall = 180,
};
var b = a.Map<ClassA, ClassB>();
var result = ObjectComparator.Equals(a, b);
//var result = a.AreEquals(b);
Assert.True(result);
}
}
参与贡献
- Fork 本仓库
- 新建 Feat_xxx 分支
- 提交代码
- 新建 Pull Request
参考
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp1.0 was computed. netcoreapp1.1 was computed. netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard1.3 is compatible. netstandard1.4 was computed. netstandard1.5 was computed. netstandard1.6 was computed. netstandard2.0 was computed. netstandard2.1 was computed. |
.NET Framework | net40 is compatible. net403 was computed. net45 was computed. net451 was computed. net452 was computed. net46 was computed. net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen30 was computed. tizen40 was computed. tizen60 was computed. |
Universal Windows Platform | uap was computed. uap10.0 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETFramework 4.0
- No dependencies.
-
.NETStandard 1.3
- NETStandard.Library (>= 1.6.1)
- System.ComponentModel.TypeConverter (>= 4.3.0)
- System.Reflection.TypeExtensions (>= 4.7.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.2.3.4 | 252 | 1/19/2022 |