在Python中反序列化在C#中创建的字节数组

时间:2014-12-03 17:04:20

标签: c# python binary deserialization

我在C#中有一个2D锯齿状双数组,我将其转换为如下字节数组:

byte[][][] byteArray = new byte[10][][];

我以这种方式将字节数组保存为二进制文件:

BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write))
{
   formatter.Serialize(stream, byteArray);
}

现在,我需要在python中读取文件,以便在那里重新构建2D双数组......

我试图使用numpy.fromfile(),并想知道应该如何做。

1 个答案:

答案 0 :(得分:1)

据我所知,BinaryFormatternumpy.fromfile()不是跨越平台,更不用说语言了。使用更加跨平台的格式(如JSON)会更容易。将double转换为byte[]的部分也可能存在问题,例如因为字节序。如果性能和数据要求不是真正的问题,那么就不容易使事情复杂化。

此示例使用Json.NET作为C#:

double[][] myArray = // whatever

var path = // whatever
using (StreamWriter file = File.CreateText(path))
{
    JsonSerializer serializer = new JsonSerializer();
    serializer.Serialize(file, myArray);
}

然后在Python中你需要做的就是:

import numpy
import json
path = # whatever
with open(path) as f:
    myArray = numpy.array(json.load(f))
# we now have the array! e.g.
print(myArray.dtype) # float64
print(myArray[0][0]) # 0.79449418131