《上一篇》 介绍了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
除了这种基本能力之外,扩展对象中还提供了丰富的方法,用于对动态对象进行更多的判断和控制,使之能够满足各种各样的应用场景。
dynamic person = Xmtool.DynamicObject();
person.Name = "softwaiter";
person.Age = 18;
Console.WriteLine(pernson["Name"]); // 打印Name属性值,输出softwaiter
name:准备赋值的属性名称。
value:属性赋值内容。
name:准备取值的属性名称。
result:获取到的属性值;为获取到将返回null。
name:属性名称。
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
name:准备设置值得属性名称。
value:属性值内容。
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
key:属性名称。
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
}
key:属性名称。
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
}
dynamic person = Xmtool.DynamicObject();
person.Name = "softwaiter";
person.Age = 18;
string json = person.ToString();
Console.WriteLine(json); // 输出{"Name":"softwaiter","Age":18}
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>