基于声明式的.net对象和多种数据格式自动相互转化的方法与流程

文档序号:15444636发布日期:2018-09-14 23:12阅读:149来源:国知局

本发明涉及电数字数据处理的技术领域,特别涉及一种数据格式与.net对象的转换方法。



背景技术:

对于绝大多数应用,都存在前端和后台,数据交互在现有的数据处理与开发中是无法避免的。

然而,前端提交的数据需要转换成后端的对象,由于系统的版本更新、各个程序员对于数据和对象的表达差异,往往造成转换方式不统一、数据及对象格式不匹配的情况,导致程序员无法完全对在先的数据或对象进行应用,程序可扩展性差,兼容性差。

这样的操作方式直接导致代码的耦合、冗余且不美观,运算量大,如果没有一种简洁的解决方式将给开发人员带来长期重复劳动,而且影响代码的可读性。



技术实现要素:

为了解决现有技术中存在的上述问题,本发明提供一种优化的数据格式与.net对象的转换方法,使用统一的可读写模块解决前后端不同步的问题。

本发明所采用的技术方案是,基于声明式的.net对象和多种数据格式自动相互转化的方法,所述方法包括以下步骤:

步骤1:构建数据格式与.net对象的可读写模块;

步骤2:输入数据,确定数据的格式类型;

步骤3:分析由可读写模块进行标记的.net对象类型;

步骤4:基于当前数据的类型,获得指令;当指令为数据关联至.net对象时,进行步骤5,当指令为.net对象关联至数据时,进行步骤6;

步骤5:调用交互模块对当前数据进行数据关联至.net对象的操作;进行步骤7;

步骤6:调用交互模块对当前数据进行.net对象关联至数据的操作,将读出数据保存至文件库或其他媒介;进行步骤7;

步骤7:结束。

优选地,所述数据的类型包括xml、json、url中的querystring。

优选地,所述可读写模块还包括用于与.net类库中的类型dataset、datarow的交互、url中的querystring格式的交互。

优选地,所述步骤1中,数据可读写模块的构建包括以下步骤:

步骤1.1:针对数据格式声明若干attribute;

步骤1.2:根据数据格式的结构,构造对应的.net对象,并在相关的.net对象的property上标记对应的attribute。

优选地,所述attribute包括映射到数据格式的属性和用于限定准确性的额外属性。

优选地,所述步骤3的分析包括以下步骤:

步骤3.1:通过反射,检索当前的类型所有的.net对象的property;

步骤3.2:检查每个.net对象的property是否标记了对应的attribute,对检索出标注了attribute的.net对象的property进行归类存储;

步骤3.3:检查当前类型的基类是否是.net的顶级基类object,如果不是,获取基类型,重复步骤3.1,直至获得完整的结构。

优选地,所述步骤5包括以下步骤:

步骤5.1:获得步骤3的分析结果,获取完整结构;

步骤5.2:当读取到数据的一个元素时,对应存储结构检索是否存在;如果存在,进行下一步,否则直接跳到该元素的结尾,结束;

步骤5.3:根据结构中存储的属性和子元素进行进一步分析,当有适配的属性或元素值,通过默认或者attribute中定义的类型转换器将数据的值转换成对应的.net类型,并通过反射存储到相应.net对象的property中;

步骤5.4:分析完毕后,对应的.net对象存储的值将和对应的数据格式的内容适配,可直接使用.net对象进行各种相关的操作。

优选地,所述步骤6包括以下步骤:

步骤6.1:获得步骤3的分析结果,获取完整结构;

步骤6.2:根据结构中的指示,通过反射获取.net对象的property值,通过可读写模块转换为相应的字符串,写入相应的数据格式的属性或者元素中;如果存在子元素,则不断向下,直到写完整个完整的对象为止。

优选地,步骤5和步骤6所述交互模块具有可扩展接口,可扩展接口配合设置有配置插件模块。

本发明提供了一种优化的数据格式与.net对象的转换方法,通过构建数据格式与.net对象的可读写模块,输入并判断数据的格式类型,分析由可读写模块进行标记的.net对象类型,基于当前数据的类型,获得指令;当指令为数据关联至.net对象时,调用交互模块对当前数据进行数据关联至.net对象的操作,当指令为.net对象关联至数据时,调用交互模块对当前数据进行.net对象关联至数据的操作,将读出数据保存至文件库或其他媒介,完成后结束。本发明主要应用在后端。

本发明的优点是:能够轻松打通前后端的交互瓶颈,达到前后端的同步,转换方式清晰,数据及对象格式匹配,程序可扩展性强,兼容性好,解决统一修改和管理的问题,有助于更简洁明了获取结果。

附图说明

图1是本发明方法的流程图。

具体实施方式

下面结合实施例对本发明做进一步的详细描述,但本发明的保护范围并不限于此。

本发明涉及基于声明式的.net对象和多种数据格式自动相互转化的方法,所述方法包括以下步骤。

所述数据的类型包括xml、json、url中的querystring。

所述可读写模块还包括用于与.net类库中的类型dataset、datarow的交互。

本发明中,事实上,数据的类型包括但不限于xml和json数据类型,系统采用插件的方式来注册读写.net对象的数据格式,xml和json最常见。此外,系统还可以实现与.net类库中的类型dataset、datarow的互通,和url中的querystring的互通,如果有新的需求,还可以根据新的需求编写相关的插件来读写相应的数据格式。

本发明中,每种插件对相关attribute的解释可以根据实际需要,解释一部分或者解释全部。

步骤1:构建数据格式与.net对象的可读写模块。

所述步骤1中,数据可读写模块的构建包括以下步骤:

步骤1.1:针对数据格式声明若干attribute;

步骤1.2:根据数据格式的结构,构造对应的.net对象,并在相关的.net对象的property上标记对应的attribute。

所述attribute包括映射到数据格式的属性和用于限定准确性的额外属性。

本发明中,attribute是.net对象的语言特性,通过声明自己的attribute,可以给相应的.net对象、property等附着额外的信息。attribute可以是针对xml属性的simpleattributeattribute、针对简单xml元素的simpleelementattribute、针对含有内嵌子元素的xml元素的objectelementattribute等。

本发明中,举例来说,定义类型(节选部分定义代码):

此处,simpleattributeattribute是映射到xml的属性,但是可以为其添加足够的额外属性来保证描述的准确性,其中,localname、namespacetype、namespaceuri是针对xml中的namespace的特性,defaultvalue是默认值,而required则是进行必录检查。

本发明中,步骤1.2是指根据数据格式的结构,如xml的结构,声明对应的.net对象,并在相关的property上标记对应的attribute,如:

此时,这个.net对象对应的xml为:

<simpleconfigheight="100"check="true">

<name>hello</name>

</simpleconfig>

如果读取完成,那么.net对象的property中check将是true,name将是hello,height为100。

步骤2:输入数据,确定数据的格式类型。

本发明中,可以定义不同的attribute,对于attribute的分析方式也会由于数据格式的不同而有所不同,所以需要对数据格式做出判断。例如,simpleattributeattribute用于分析xml中的属性而用于针对json中的值对,simpleelementattribute在xml元素中为简单值且不包含属性,在json中表示值对,textcontentattribute在xml元素中为简单值且单包含属性,在json中不被支持,objectelementattribute表示xml元素中含有子元素而针对json中的子对象,dictionaryattribute在xml元素为名称/简单值对且不太关注名称,而在json对象中为名称/值对,也不太关注名称,objectdictionaryattribute在xml元素和json对象均为为名称/子元素对且不太关注名称,tagelementattribute在xml元素仅仅是外层嵌套,使用该标记可以越过该层嵌套,减少子类定义,而在json标记仅仅是外层嵌套,使用该标记可以越过该层嵌套,减少子类定义。

步骤3:分析由可读写模块进行标记的.net对象类型。

所述步骤3中,分析包括以下步骤:

步骤3.1:通过反射,检索当前的类型所有的.net对象的property;

步骤3.2:检查每个.net对象的property是否标记了对应的attribute,对检索出标注了attribute的.net对象的property进行归类存储;

步骤3.3:检查当前类型的基类是否是.net的顶级基类object,如果不是,获取基类型,重复步骤3.1,直至获得完整的结构。

本发明中,如果需要读取格式数据,首先分析标记了attribute的.net对象类型。由于面向对象支持继承结构,这种分析除了分析自身外,还将不断分析其基类型,如果检测出attribute是objectelementattribute,或者objectdictionaryattribute这种类型的attribute,将继续钻取分析其对应的.net类型。这样,将获取一个完整的格式。可见,如果对应.net声明的property支持嵌套结构,分析程序即会向内钻取,分析其内部的声明结构,一直得到一个完整结构为止。

步骤4:基于当前数据的类型,获得指令;当指令为数据关联至.net对象时,进行步骤5,当指令为.net对象关联至数据时,进行步骤6。

步骤5:调用交互模块对当前数据进行数据关联至.net对象的操作;进行步骤7。

所述步骤5包括以下步骤:

步骤5.1:获得步骤3的分析结果,获取完整结构;

步骤5.2:当读取到数据的一个元素时,对应存储结构检索是否存在;如果存在,进行下一步,否则直接跳到该元素的结尾,结束;

步骤5.3:根据结构中存储的属性和子元素进行进一步分析,当有适配的属性或元素值,通过默认或者attribute中定义的类型转换器将数据的值转换成对应的.net类型,并通过反射存储到相应.net对象的property中;

步骤5.4:分析完毕后,对应的.net对象存储的值将和对应的数据格式的内容适配,可直接使用.net对象进行各种相关的操作。

本发明中,以xml为例,采用pull的方式对xml进行分析。当读取一个元素时,将去对应存储结构去检索是否存在,如果不存在,将直接跳到该元素的结尾;如果存在,将根据结构中存储的属性,子元素等进行进一步分析,当有适配的属性或者元素值,将通过默认或者attribute中定义的类型转换器将xml的值转换成对应的.net类型,并通过反射存储到相应的property中

步骤6:调用交互模块对当前数据进行.net对象关联至数据的操作,将读出数据保存至文件库或其他媒介;进行步骤7。

所述步骤6包括以下步骤:

步骤6.1:获得步骤3的分析结果,获取完整结构;

步骤6.2:根据结构中的指示,通过反射获取.net对象的值,通过可读写模块转换为相应的字符串,写入相应的数据格式的属性或者元素中;如果存在子元素,则不断向下,直到写完整个完整的对象为止。

步骤7:结束。

以下是采用本发明方法将.net对象和多种数据格式自动相互转化的结果:

.net类型

和对等的xml自动相互转化的格式:

<simpleconfigheight="100"check="true">

<name>hello</name>

</simpleconfig>

和对等的json自动相互转化的格式:

{"height":"100","check":"true","name":"hello"}

和对等的url中的querystring自动相互转化的格式:

height=100&check=true&name=hello

和对等的datarow自动相互转化:

datarow是.net类库的一种类型,无法直接看见。其结构类似于数据库中的一行数据。实际上,这个记录就是会将字段名为height的值设为100,字段名为check的值设为true,字段名为name的值设为hello。反向一样可以操作。

和dataset转化

dataset是表的集合,不适合这种简单的平面数据,而是复杂的复合数据。比如,以上面的类型为基础,做新的声明:

这时,和dataset进行转换的插件,就会把configlist转换成一张表,因为这是一个集合,所以集合中的每个元素都会变成一个datarow,而添加到表中。

当然,可以在complexconfig中添加新的集合类型,同样会变成新的表,而里面的集合也会变成datarow的集合添加到表中。

反向亦如此,dataset中的表,会把每行转化成一个对象,添加到对应的集合中。

所述交互模块具有可扩展接口,可扩展接口配合设置有配置插件模块。

本发明中,交互模块还可以通过可扩展接口配合设置插件模块。配置插件就是通过定义一个规范,后续的开发人员可以定义自己的.net的xml片段,并通过配置插件提供的机构,自动注册到系统中去,这样就对自己定义xml片段有了对应的解释。系统核心代码能通过xml的tagname认出它是哪个插件会调用相应的代码去解释。

本发明中,插件模块使xml的定义具有无限扩展能力,这样系统内核只需要定义一个恰当的xml框架,就能够获得良好的扩展性,处理各式各样的问题。配置插件由于整合了前述attribute中的相关内容,所以读写xml并不需要去写特别的分析代码。json格式对配置插件的支持有限,后续将考虑让json完全支持配置插件,同时考虑配置标签的版本化,即相同的xmltagname因为版本的不同,会自动映射到不同的.net类上,这方便升级和对下兼容。

本发明通过构建数据格式与.net对象的可读写模块,输入并判断数据的格式类型,分析由可读写模块进行标记的.net对象类型,基于当前数据的类型,获得指令;当指令为数据关联至.net对象时,调用交互模块对当前数据进行数据关联至.net对象的操作,当指令为.net对象关联至数据时,调用交互模块对当前数据进行.net对象关联至数据的操作,将读出数据保存至文件库,完成后结束。本发明主要应用在后端,能够轻松打通前后端的交互瓶颈,达到前后端的同步,转换方式清晰,数据及对象格式匹配,程序可扩展性强,兼容性好,解决统一修改和管理的问题,有助于更简洁明了获取结果。

本说明书实施例所述的内容仅仅是对发明构思的实现形式的列举,本发明的保护范围不应当被视为仅限于实施例所陈述的具体形式,本发明的保护范围也及于本领域技术人员根据本发明构思所能够想到的等同技术手段。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1