当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);
excellent什么意思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