开源.NetCore通用工具库Xmtool使用连载 - 扩展动态对象篇

开源,netcore,通用,工具,xmtool,使用,连载,扩展,动态,对象 · 浏览次数 : 4

小编点评

**扩展动态对象类库** 扩展动态对象是Xmtool工具库中最重要的一个设计。它提供了无需直接赋值的形式使用数据对象,简化了大量的定义过程,提高了开发效率。 **主要功能:** * 直接创建对象,并根据实际数据对象结构进行赋值。 * 提供多种方法用于对动态对象进行判断和控制。 * 支持多层级属性设置和获取。 **主要属性:** * **Name:**属性名称。 * **Age:**属性值。 * **Pet:**指向扩展动态对象的子对象。 * **Pet.Name:**宠物名称。 * **Pet.Kind:**宠物类型。 **示例代码:** ```csharp // 直接创建对象,并根据实际数据对象结构进行赋值 dynamic person = Xmtool.DynamicObject(); person.Name = "softwaiter"; person.Age = 18; // 设置多层级属性的值 person.Pet.Name = "Tom"; person.Pet.Kind = "Cat"; // 获取多层级属性的值 Console.WriteLine(person.GetValueByPath("Pet.Name")); // 输出 "Tom" ``` **总结:** 扩展动态对象提供了一种简化的解决方案,可以简化数据对象定义和管理,提高开发效率。

正文

【Github源码】


《上一篇》 介绍了Xmtool工具库中的图形验证码类库,今天我们继续为大家介绍其中的扩展动态对象类库。


扩展动态对象是整个工具库中最重要的一个设计。在软件开发过程中,我们经常需要定义各种各样的数据对象;例如:用于参数传递的数据实体类、用于接口返回结果的Json对象等等。

// 人员数据实体定义
public class Person
{
    public string Name { get; set; } = null;
    public int Age { get; set; } = 0;
}

当我们遇到的场景越多、越复杂,我们需要定义和维护的这种类也会更多;这无疑是一种负担,且这个过程相当枯燥和乏味。在编译型编程语言Javascript中,变量是没有强制指定类型的,用户使用时可以随意赋值;这让开发人员在使用过程中会非常灵活且方便;参考这种特性,并基于系统DynamicMetaObject对象,我们封装了DynamicObjectExt对象,我们称之为扩展动态对象,它实现了无需定义直接赋值的形式使用数据对象,像Javascript中一样简单和灵活,帮我们简化了大量的定义过程。

// 直接创建对象,并根据实际数据对象结构进行赋值即可
dynamic person = Xmtool.DynamicObject();
person.Name = "softwaiter";
person.Age = 18;
// TODO

除了这种基本能力之外,扩展对象中还提供了丰富的方法,用于对动态对象进行更多的判断和控制,使之能够满足各种各样的应用场景。

this属性

TrySetValue方法

TryGetValue方法

GetValue方法

GetValueByPath方法

SetValue方法

SetValueByPath方法

Has方法

HasPath方法

Remove方法

RemovePath方法

ToString方法

ToXMLString方法

1. this属性

说明:根据指定属性名称获取属性值。
dynamic person = Xmtool.DynamicObject();
person.Name = "softwaiter";
person.Age = 18;
Console.WriteLine(pernson["Name"]);	// 打印Name属性值,输出softwaiter

2. TrySetValue方法

public bool TrySetValue(string name, object value)
说明:尝试为指定name的属性赋值,赋值成功返回true;否则返回false。
参数:

name:准备赋值的属性名称。

value:属性赋值内容。

3. TryGetValue方法

public bool TryGetValue(string name, out object result)
说明:尝试从指定name的属性获取值,获取成功返回true;否则返回false。
参数:

name:准备取值的属性名称。

result:获取到的属性值;为获取到将返回null。

4. GetValue方法

public object GetValue(string name)
说明:返回指定name的属性值;不存在找到则返回null。
参数:

name:属性名称。

5. GetValueByPath方法

public object GetValueByPath(string path)
说明:GetValue方法的扩展,GetValueByPath能获取多层级属性的值。
参数:

path:多层级属性路径,中间用“.”连接。

dynamic person = Xmtool.DynamicObject();
person.Name = "softwaiter";
person.Age = 18;
person.Pet = Xmtool.DynamicObject();
person.Pet.Name = "Tom";
person.Pet.Kind = "Cat";
Console.WriteLine(pernson.GetValueByPath("Pet.Name"));	// 打印宠物名称,输出Tom

6. SetValue方法

public object SetValue(string name, object value)
说明:为指定name的属性设置值。
参数:

name:准备设置值得属性名称。

value:属性值内容。

7. SetValueByPath方法

public bool SetValueByPath(string path, object value)
说明:SetValue方法的扩展,SetValueByPath能设置多层级属性的值。
参数:

path:多层级属性路径,中间用“.”连接。

value:属性值内容。

dynamic person = Xmtool.DynamicObject();
person.Name = "softwaiter";
person.Age = 18;
person.Pet = Xmtool.DynamicObject();
person.Pet.Name = "Tom";
person.Pet.Kind = "Cat";
person.SetValueByPath("Pet.Name", "Chika");
Console.WriteLine(pernson.GetValueByPath("Pet.Name"));	// 打印宠物名称,输出Chika

8. Has方法

public bool Has(string key)
说明:判断是否包含指定属性。
参数:

key:属性名称。

9. HasPath方法

public bool HasPath(string path)
说明:Has方法的扩展,HasPath能判断多层级属性是否存在。
参数:

path:多层级属性路径,中间用“.”连接。

dynamic person = Xmtool.DynamicObject();
person.Name = "softwaiter";
person.Age = 18;
person.Pet = Xmtool.DynamicObject();
person.Pet.Name = "Tom";
person.Pet.Kind = "Cat";
if (person.HasPath("Pet.Name"))
{
    // TODO
}

10. Remove方法

public bool Remove(string key)
说明:从对象上删除指定的属性。
参数:

key:属性名称。

11. RemovePath方法

public bool RemovePath(string path)
说明:Remove方法的扩展,RemovePath能删除多层级属性。
参数:

path:多层级属性路径,中间用“.”连接。

dynamic person = Xmtool.DynamicObject();
person.Name = "softwaiter";
person.Age = 18;
person.Pet = Xmtool.DynamicObject();
person.Pet.Name = "Tom";
person.Pet.Kind = "Cat";
person.RemovePath("Pet.Kind");
if (person.HasPath("Pet.Kind")) // 将返回false
{
	// TODO   
}

12. ToString方法

public override string ToString()
说明:将对象序列化为JSON字符串并返回;常用于API接口结果返回。
dynamic person = Xmtool.DynamicObject();
person.Name = "softwaiter";
person.Age = 18;
string json = person.ToString();
Console.WriteLine(json);	// 输出{"Name":"softwaiter","Age":18}

13. ToXMLString方法

public string ToXMLString(string defaultNS = "")
说明:将对象序列化为XML字符串并返回。
参数:

defaultNS:默认命名空间。

dynamic person = Xmtool.DynamicObject();
person.Name = "softwaiter";
person.Age = 18;
string xml = person.ToXMLString();
Console.WriteLine(xml);	//输出<xml><Name>softwaiter</Name><Age>18</Age></xml>
string xml2 = person.ToXMLString("http://www.xmltool.com");
Console.WriteLine(xml2); //输出<xml xmlns="http://www.xmltool.com"><Name>softwaiter</Name><Age>18</Age></xml>


【Github源码】

与开源.NetCore通用工具库Xmtool使用连载 - 扩展动态对象篇相似的内容:

开源.NetCore通用工具库Xmtool使用连载 - 扩展动态对象篇

【Github源码】 《上一篇》 介绍了Xmtool工具库中的图形验证码类库,今天我们继续为大家介绍其中的扩展动态对象类库。 扩展动态对象是整个工具库中最重要的一个设计。在软件开发过程中,我们经常需要定义各种各样的数据对象;例如:用于参数传递的数据实体类、用于接口返回结果的Json对象等等。 //

开源.NetCore通用工具库Xmtool使用连载 - 加密解密篇

【Github源码】 《上一篇》详细介绍了Xmtool工具库中的正则表达式类库,今天我们继续为大家介绍其中的加密解密类库。 在开发过程中我们经常会遇到需要对数据进行加密和解密的需求,例如密码的加密、接口传输数据的加密等;当前类库中只封装了Base64、AES两种加密解密方法,因为C#提供了几乎我们能

开源.NetCore通用工具库Xmtool使用连载 - 散列算法篇

【Github源码】 《上一篇》详细介绍了Xmtool工具库中的加解密类库,今天我们继续为大家介绍其中的散列算法类库。 散列算法在某些特殊场景也可以当做加密方法使用;其特点是不可逆,同一内容每次散列值绝对一致,所以也可用作对数据内容是否被篡改的校验方法;或者其他需要唯一性编码的场景;本类库提供了MD

开源.NetCore通用工具库Xmtool使用连载 - 随机值篇

【Github源码】 《上一篇》 详细介绍了Xmtool工具库中的散列算法类库,今天我们继续为大家介绍其中的随机值类库。 基于系统提供的Random获取随机值方法已经足够简单和易用,本类库只对日常开发过程中最常用到的生成随机验证码方法进行了封装,后续发现其他有价值的常用随机值需求,会陆续添加到类库中

开源.NetCore通用工具库Xmtool使用连载 - 发送邮件篇

#### [【Github源码】](https://github.com/softwaiter/Xmtool) [《上一篇》](https://www.cnblogs.com/bcbr/p/17393628.html) 介绍了Xmtool工具库中的随机值类库,今天我们继续为大家介绍其中的邮件发送类库

开源.NetCore通用工具库Xmtool使用连载 - 发送短信篇

### [【Github源码】](https://github.com/softwaiter/Xmtool) [《上一篇》](https://www.cnblogs.com/bcbr/p/17421734.html) 介绍了Xmtool工具库中的发送邮件类库,今天我们继续为大家介绍其中的发送短信类库

开源.NetCore通用工具库Xmtool使用连载 - XML操作篇

### [【Github源码】](https://github.com/softwaiter/Xmtool) [《上一篇》](https://www.cnblogs.com/bcbr/p/17447376.html) 介绍了Xmtool工具库中的发送短信类库,今天我们继续为大家介绍其中的XML操作类

开源.NetCore通用工具库Xmtool使用连载 - HTTP请求篇

### [【Github源码】](https://github.com/softwaiter/Xmtool) [《上一篇》](https://www.cnblogs.com/bcbr/p/17608881.html) 介绍了Xmtool工具库中的XML操作类库,今天我们继续为大家介绍其中的HTTP请

开源.NetCore通用工具库Xmtool使用连载 - 图形验证码篇

### [【Github源码】](https://github.com/softwaiter/Xmtool) [《上一篇》](https://www.cnblogs.com/bcbr/p/17624230.html) 介绍了Xmtool工具库中的Web操作类库,今天我们继续为大家介绍其中的图形验证码

MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(8)-Ant Design Blazor前端框架搭建

前言 前面的章节我们介绍了一些值得推荐的Blazor UI组件库,通过该篇文章的组件库介绍最终我选用Ant Design Blazor这个UI框架作为ToDoList系统的前端框架。因为在之前的工作中有使用过Ant Design Vue、Ant Design Angular习惯并且喜欢Ant Des