C#中整数矩阵的序列化和反序列化

4

我正在使用一个C#的WCF服务,我需要在其中一个方法中向客户端返回一个int[,]。问题是,WCF不支持多维数组,所以我认为我的唯一选择是以以下方式返回一个字节数组:

    public byte[] DistanceMatrix()
    {
        int[,] matrix;

        //DOING THINGS HERE

        IFormatter formatter = new BinaryFormatter();
        var ms = new MemoryStream();
        formatter.Serialize(ms, matrix);

        return ms.ToArray();
    }

但我不知道如何将byte[]反序列化为int [,]


你反序列化的方式和序列化几乎完全相同。将字节数组放回MemoryStream中,并通过BinaryFormatter的Deserialize方法输入即可。 - Corey Ogburn
你尝试过以下的stackoverflow答案吗?http://stackoverflow.com/questions/16400118/wcf-multi-dimensional-arrays-are-not-supported - Ghost93
1个回答

3
这篇由Josh Reuben撰写的博客可以帮助你:WCF操作和多维数组
这里有一些扩展方法,可以让你在序列化之前进行转换,在反序列化后再转换回来:
    public static T[,] ToMultiD<T>(this T[][] jArray)
    {
        int i = jArray.Count();
        int j = jArray.Select(x => x.Count()).Aggregate(0, (current, c) => (current > c) ? current : c);


        var mArray = new T[i, j];

        for (int ii = 0; ii < i; ii++)
        {
            for (int jj = 0; jj < j; jj++)
            {
                mArray[ii, jj] = jArray[ii][jj];
            }
        }

        return mArray;
    }

    public static T[][] ToJagged<T>(this T[,] mArray)
    {
        var cols = mArray.GetLength(0);
        var rows = mArray.GetLength(1);
        var jArray = new T[cols][];
        for (int i = 0; i < cols; i++)
        {
            jArray[i] = new T[rows];
            for (int j = 0; j < rows; j++)
            {
                jArray[i][j] = mArray[i, j];
            }
        }
        return jArray;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接