首页 新闻 会员 周边

C#根据xml动态创建实体类

0
悬赏园豆:15 [已解决问题] 解决于 2017-10-10 11:06

如何读取xml,根据xml动态的创建实体类然后并调用创建实体类。这个可以实现吗?

问题补充:

我想做一个客户可以通过界面配置的MSMQ接口。用xml配置接口发送的消息格式和结构。因为我了解的msmq发送报文设置格式要用“myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) }); ” ,T要是个实体类,我想根据xml配置自动去生成这个实体类

我的想法有点问题。我现在遇到的问题如下

使用MSMQ发送xml时有个设置

Message.Formatter属性的,按照正常要创建一个实体类,然后Message.Formatter = new XmlMessageFormatter(new Type[] { typeof(实体类) }),消息队列的正文才能显示正常的xml,那如何将数据存的字符串(例如:字符串为"<?xml version="1.0"><Head></Head><List><user></user></List>")发送出去,对方接受的也是相应的值,现在出现下列值。没有其他方法呢?

3C 3F 78 6D 6C 20 76 65 <?xml ve
72 73 69 6F 6E 3D 22 31 rsion="1
2E 30 22 3F 3E 0D 0A 3C .0"?>..<
73 74 72 69 6E 67 3E 26 string>&
6C 74 3B 3F 78 6D 6C 20 lt;?xml 
76 65 72 73 69 6F 6E 3D version=
22 31 2E 30 22 20 65 6E "1.0" en

可能描述比较含糊。我写的程序大致流程是   1.用户配置MSMQ消息的接收发送地址和消息的结构(例如:“<?xml version="1.0"><Head></Head><List><user></user></List><List><user></user></List>“在用户界面配置的是Head第一层第一个不循环父节点是xml,List第一层第二个循环...)及各个节点关联数据库的数据等 2.根据配置和关联数据创建xml然后转化String保存到数据库 3.讲保存的消息发送出去。自己想的中间不创建任何的消息实体类,发送时根据结构配置自动实现,目的是让维护人员就可以做接口对接,减少开发。但是将消息格式化要用到System.Messaging.Message.Formatter,格式化一定要传个实体类,不用实体类用String就会出现

3C 3F 78 6D 6C 20 76 65 <?xml ve
72 73 69 6F 6E 3D 22 31 rsion="1
2E 30 22 3F 3E 0D 0A 3C .0"?>..<
73 74 72 69 6E 67 3E 26 string>&
6C 74 3B 3F 78 6D 6C 20 lt;?xml 
76 65 72 73 69 6F 6E 3D version=
22 31 2E 30 22 20 65 6E "1.0" en

请问有没有其他方法解决这个问题?我发送的是什么服务器哪里接收的是什么

R-K的主页 R-K | 初学一级 | 园豆:191
提问于:2017-10-09 14:05
< >
分享
最佳答案
-1

然后.创建完实体类要拿来干嘛?

收获园豆:12
吴瑞祥 | 高人七级 |园豆:29449 | 2017-10-09 14:13

是这样的,我想做一个客户可以通过界面配置的MSMQ接口。用xml配置接口发送的消息格式和结构。因为我了解的msmq发送报文设置格式要用“myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) }); ” ,T要是个实体类,我想根据xml配置自动去生成这个实体类

R-K | 园豆:191 (初学一级) | 2017-10-09 14:23

还是不明白这么做的必要性.

运行时生成代码是可以的.但是如果不是那么必要.没人去花这功夫.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-10-09 15:00

@拜托鸡肋的菜鸟: 意思是.你已经有了一个消息要发送的实体类.只是这个实体类有多个.

配置是在多个已有的实体类里切换?

吴瑞祥 | 园豆:29449 (高人七级) | 2017-10-09 16:10

@拜托鸡肋的菜鸟: 那你就把消息弄成string格式.然后传json字符串.

传入的获取的时候都json序列化和反序列化一下.

你发送时根据配置自动实现了.那接受的地方呢.接受的地方不知道消息内容的结构怎么用他?

吴瑞祥 | 园豆:29449 (高人七级) | 2017-10-09 16:44

@吴瑞祥: 接收比较好处理,接收都是状态值。我已经处理过了,不用任何的实体类,直接将xml或者json转化为DataSet就可以了,然后根据配置关联相应的表字段

R-K | 园豆:191 (初学一级) | 2017-10-09 16:48

@拜托鸡肋的菜鸟: 这个配置是在客户端做的.你服务器怎么能知道对应的映射关系?

吴瑞祥 | 园豆:29449 (高人七级) | 2017-10-09 16:49

@拜托鸡肋的菜鸟: 那你就发送json字符串吧.类型就是string.没这些事.

完全没必要去搞什么运行时代码.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-10-09 16:56

@拜托鸡肋的菜鸟: 你用xml传json值啊..

吴瑞祥 | 园豆:29449 (高人七级) | 2017-10-09 17:01

@拜托鸡肋的菜鸟: 你要传的是个对象吧.你先把这个对象json序列化了.

得到一个字符串.然后用你这个MSMQ发出去.Message.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) }),

这样

吴瑞祥 | 园豆:29449 (高人七级) | 2017-10-09 17:37
其他回答(1)
-1

可以。你先序列化出来就清楚了。

收获园豆:3
花飘水流兮 | 园豆:13560 (专家六级) | 2017-10-09 14:14

序列化后如何调用?

支持(0) 反对(0) R-K | 园豆:191 (初学一级) | 2017-10-09 14:27

@拜托鸡肋的菜鸟: 不管你走什么通道,只要是时序体系(目前的计算机都是),一定会有10,那么接收方把这个byte[]拿去反序列化就行了。如果无法做到类型自动匹配,你大不了再创建个类,包含{typeName;instanceData;},然后前者用于类型说明,后者为实例,最后整体ToBuffer

支持(0) 反对(0) 花飘水流兮 | 园豆:13560 (专家六级) | 2017-10-09 16:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册