当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();
}
}
comet>qqywfpublic string WriteXmlSchema(DataTable dt)
{
using (StringWriter sw = new StringWriter())怀春
adhesive{
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在序列化的时候出现的时间格式的问题。
挫折也美丽
八年级上册英语单词领读如果有遇到同样问题,有⽐这个更好的解决办法的;欢迎拍砖留⾔。
⼊群和⼀起聊技术群号:88390778