zoukankan      html  css  js  c++  java
  • 当RabbitMQ使用Publish发布消息出现数据格式问题的解决方法

    前几天公司内部开发,直接使用ADO的Adapter读取的数据,没有指定数据类型。遇到了一个使用publish发布消息之后,subscribe到的消息出现类型转换的问题,调试后发现是RabbitMQ在序列化DataTable数据的时候,将时间格式序列化成UTC时间了,这样一来,之前的代码就没用了。所以出现一个解决方案,这是目前我们用到的解决方案,可能还有其他更方便更简洁的。下面是我使用的解决方案:publish出去的json无数据类型,那么有的时间格式序列化的正常,有的则被序列化成了UTC时间。现在我使用了一个xml来传输数据,在将数据序列化成xml传输的时候也出现了数据格式的问题,还是某些时间格式被序列化成了UTC时间。

    这个时候就要考虑几个问题:json是无数据类型的,传输的时候出现了问题;而xml传输也是没有指定数据类型才造成这个问题的;如果我指定数据类型会怎么样?于是使用几行代码来实现:

           public string WriteXml(DataTable dt)
            {
                using (StringWriter sw = new StringWriter())
                {
                    dt.WriteXml(sw);
                    return sw.ToString();
                }
            }
    

      

          public string WriteXmlSchema(DataTable dt)
            {
                using (StringWriter sw = new StringWriter())
                {
                    dt.WriteXmlSchema(sw);
                    return sw.ToString();
                }
            }    
    

      

    于是在将数据序列化成xml的时候,也顺便将数据的数据类型序列化成xml,这样publish过去的就是:数据的xml和数据类型的xml两个数据;在Consume的时候,将两个数据进行合并:

           public DataTable XmlToDataTable(string xml, string xmlSchema )
            {
                DataTable dt = new DataTable();
                dt.ReadXml(xml);
                dt.ReadXmlSchema(xmlSchema);
                return dt;
            }
    

      

    目前就是用这种方式解决了传输的DataTable在序列化的时候出现的时间格式的问题。

    如果有遇到同样问题,有比这个更好的解决办法的;欢迎拍砖留言。

    入群和一起聊技术.NET技术交流与招聘    群号:88390778

  • 相关阅读:
    日报9.4
    日报9.3
    低级错误整理
    树状数组求逆序对 笔记与思路整理
    st表、树状数组与线段树 笔记与思路整理
    Luogu P1098 字符串的展开
    Luogu P1816 忠诚
    jmeter cookie管理器 使用方法---新手学习记录1
    kali nessus 安装插件失败解决方法
    https tomcat 证书搭建
  • 原文地址:https://www.cnblogs.com/Object-Class/p/7399216.html
Copyright © 2011-2022 走看看