首页 > 解决方案 > 如何将字节[]转换为c#中的数据表?

问题描述

我在我的报告应用程序中使用 tableau server 进行报告,并且我在 tableau server 上创建了报告文件,它工作正常。我需要通过邮件将这些报告文件发送给用户。我已使用以下代码将报告导出到字节 []

var client = new RestSharp.RestClient(repartPath);
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("Accept-Encoding", "gzip, deflate");
request.AddHeader("Host", hostname);
request.AddHeader("Postman-Token", tokenValue);
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("Accept", "*/*");
request.AddHeader("User-Agent", "PostmanRuntime/7.19.0");
request.AddHeader("X-Tableau-Auth", tableauToken);
IRestResponse response = client.Execute(request);
if (response.IsSuccessful)
{
 return response.RawBytes;
}

上面的代码返回字节 []。现在我想将字节 [] 转换为数据表,将字节 [] 转换为数据表。我正在使用以下代码:

using (MemoryStream stream = new MemoryStream(byteArrayData))
{
  BinaryFormatter binaryFormatter = new BinaryFormatter();
   _dataTable= (DataTable)binaryFormatter.Deserialize(stream);
}

但它抛出异常:输入字符串不是有效的二进制格式。任何帮助将不胜感激,非常感谢提前。

标签: c#asp.net-mvc

解决方案


序列化数据时,序列化和反序列化方法必须匹配。您展示了一些发出请求的代码,但它不包括实际执行序列化的代码。所以最可能的答案是 BinaryFormatter 没有用于序列化数据。

但是,binaryFormatter 可能不是序列化程序的正确选择。这或多或少采用了数据在内存中的表示方式,并将其放入数据流中。值得注意的是,它可能会因更改 .Net 版本而中断,但它还有许多其他问题

如果字节数组表示文件,则应将字节数组转换为流并将流提供给任何可以读取文件的库。或者,如果这不可能,将字节数组保存到一个临时文件中,并要求库打开该文件。

如果您想自己进行序列化,您通常会创建一个适合序列化的新类型,将数据转换为该类型,然后使用一些序列化库对其进行序列化。Json.NetProtobuf.Net是相当流行的序列化库,但还有更多。


推荐阅读