首页 > 其他分享 >开源.NetCore通用工具库Xmtool使用连载 - 扩展动态对象篇

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

时间:2023-09-30 10:01:57浏览次数:58  
标签:Name NetCore Pet person 开源 Xmtool public string 属性

【Github源码】

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

// 人员数据实体定义
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方法

<br>

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>

<br>

【Github源码】

标签:Name,NetCore,Pet,person,开源,Xmtool,public,string,属性
From: https://blog.51cto.com/u_16229237/7655226

相关文章

  • Go每日一库之135:Ent(Facebook 开源 Golang 实体框架)
    对于后端开发者来说,一款好用的框架能够大大提升应用的开发效率。为了降低开发者使用TiDB的门槛,方便开发者快速连接到TiDB,我们也在和合作伙伴一起,逐步完善面向主流开发语言和框架的连接支持。近日,Facebook开源的Golang实体框架Ent完成了对TiDB数据库的支持。Ent是......
  • 玩一玩“baichuan2”,很强的中文开源模型,2060s即可流畅运行!
    OpenAIChatGPT出来后,热闹了好一阵子!先是一波大厂闭源PK。然后Meta不按套路出牌,直接放出来开源的Llama1-2 后来就百花齐放了。但是外国的模型默认情况下中文支持都不好。另外很多开源模型,最简单的对话都一塌糊涂。今天来玩一个不错的中文开源模型。先来简......
  • 开源药店商城系统源码比较:哪个适合你的药品电商业务
    在构建药品电商业务时,选择适合的药店商城系统源码是至关重要的决策之一。开源药店商城系统源码提供了快速入门的机会,但在选择之前,您需要仔细考虑您的需求、技术要求和可扩展性。本文将比较几个流行的开源药店商城系统源码,以帮助您找到最适合您业务的选项。1.MagentoMagento是一个......
  • 文明城市美丽乡村随手拍小程序开源版开发
    文明城市美丽乡村随手拍小程序开源版开发拍照功能:用户可以通过小程序直接打开手机相机,拍摄当前所见的城市或乡村美景。美化照片功能:用户可以在拍摄或选择的照片上进行美化处理,如调整亮度、对比度、饱和度,添加滤镜等,以增强照片的美感。添加标签功能:用户可以为照片添加标签,如城市名、......
  • 我为开放原子全球开源峰会助力
    ......
  • HTML Tidy 将HTML转换为XHTML的开源工具
    基本信息软件名称:HTMLTidy开发者主页:tidy.sourceforge.net软件大小:112K安装环境:有多平台版本,本站提供MicrosoftWindows95/98/Me/2000/xp平台版本版本:2005年8月由W3C香港分部提供此版本增加了对gb2312编码的支持软件说明我们现在的网站大部分都是HTML的,如果希望将它们标......
  • 开源大咖说 | openEuler: 技术引领,走向世界
    编者按:2023年9月19日,为期3天的欧洲顶级开源峰会OSSUMMIT2023(OpenSourceSummit)在西班牙举办。作为开放原子开源基金会旗下的项目,openEuler作为钻石级别赞助参会。这也是openEuler和OpenAtom基金会首次联袂在国际舞台上进行展示和亮相。我们很荣幸邀请openEuler技术委员会委员熊伟......
  • Grafana 开源了一款 eBPF 采集器 Beyla
    eBPF的发展如火如荼,在可观测性领域大放异彩,Grafana近期也发布了一款eBPF采集器,可以采集服务的RED指标,本文做一个尝鲜介绍,让读者有个大概了解。eBPF基础介绍可以参考我之前的文章《eBPFHelloworld》。理论上,eBPF可以拿到服务收到的请求信息,比如QPS、延迟、成功率等,这......
  • C#开源且免费的Windows桌面快速预览神器 - QuickLook
    前言今天给大家推荐一款由C#开源且免费的Windows桌面快速预览神器:QuickLook。工具介绍QuickLook是一款在Windows操作系统上的实用工具,它提供了一种快速预览文件内容的方式。通过使用QuickLook,用户可以在不打开文件的情况下,直接在文件资源管理器中快速查看文件的内容。使用Quic......
  • AspNetCore不明确的匹配异常-请求与多个终结点匹配
    框架:net6.0AspNetCoreMVC添加区域控制器HomeController,直接启动报错;因默认路由下存在相同的控制器HomeController(非区域的),需要修改路由映射配置;在Program.cs添加区域路由配置app.MapAreaControllerRoute(name:"areaRoute",areaName:"Admin",pattern:......