我正在查询一个返回字节 [] 的 Web 服务(外部系统)。这个 byte[] 是一个 csv 文件,我将 byte[] 作为 csv 保存到临时位置,然后将 csv 文件解析到数据库。
是否可以直接读取 byte[] 而不是将文件保存到临时位置,而是将其存储在内存中并将文件内容解析到数据库?
我将打开字节 [] 作为文件查看,但实际上没有先将其保存为文件,不确定现在情况是否发生了变化?任何输入将不胜感激。
我正在查询一个返回字节 [] 的 Web 服务(外部系统)。这个 byte[] 是一个 csv 文件,我将 byte[] 作为 csv 保存到临时位置,然后将 csv 文件解析到数据库。
是否可以直接读取 byte[] 而不是将文件保存到临时位置,而是将其存储在内存中并将文件内容解析到数据库?
我将打开字节 [] 作为文件查看,但实际上没有先将其保存为文件,不确定现在情况是否发生了变化?任何输入将不胜感激。
不是很容易找到,但标准中有一个 CSV 解析器。
public void HandleMycontent(byte[] content)
{
using (var stream = new System.IO.MemoryStream(content))
{
using (var reader = new StreamReader(stream))
{
using (var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(reader))
{
//parse my csv here
}
}
}
}
您可以使用MemoryStream
该类而不是FileStream
:
var stream = new MemoryStream(yourByteArray);
您链接到的相关问题是关于在 Word 中加载它。这与仅在本地解析它非常不同。在这种情况下,只需将其连接到一个MemoryStream
和CsvReader
(外部链接):工作完成:
using(var ms = new MemoryStream(theData))
using(var sr = new StreamReader(ms))
using(var reader = new CsvReader(sr)) {
// read the data...
}
不完全确定这一点,因为另一方面对象应该按照相同的逻辑进行序列化,但您可以尝试一下:
MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
memoryStream.Write(serializedInstance, 0, serializedInstance.Length);
memoryStream.Seek(0, SeekOrigin.Begin);
string deserializedInstance = (string)binaryFormatter.Deserialize(memoryStream);