当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

原文地址:https://www.cnblogs.com/Object-Class/p/7399216.html