数据合约+多维数组——任何解决方案

本文关键字:数组 任何 解决方案 数据 | 更新日期: 2023-09-27 18:12:45

From MSDN:

组合集合类型(具有集合的集合)是允许的。锯齿数组被视为集合的集合。不支持多维数组

那么,如果你不能正常地序列化一个多维数组,如何有效地解决这个问题呢?我的想法是有一个属性,使数组变平,序列化该集合,并在反序列化期间不使其变平,但我不确定这是否有效?

有人找到解决这个问题的方法吗?


我应该注意到,我认为扁平化可能有效的原因是因为我的维度是固定值(它们是硬编码的)。

数据合约+多维数组——任何解决方案

是的,您可以将其平放或锯齿化,这是更方便的方法。

任何时候,在二维数组中,您都要花费O(n)个努力(或输入中的每个项目一个"处理"单元)。就像你说的,在二维和一维之间转换并不是很麻烦。除非您正在处理非常大的容量(web服务的调用频率的数组大小),或者在高度受限的系统上(.Net Compact或.Net Micro Frameworks),我怀疑这真的是个大问题。排序之类的事情才会变得昂贵。

       string[,] input = new string[5, 3];
       string[] output = new string[15];
       for (int i = 0; i < input.GetUpperBound(0); i++)
       {
           for (int j = 0; j < input.GetUpperBound(1); j++)
           {
               output[j * input.GetUpperBound(j) + i] = input[i, j];
           }
       }

可以使用扩展方法:

public static string[][] Jaggedize(this string[,] input) {
  string[][] output = new string[input.GetLength(0)][];
  for (int i = 0; i < input.GetLength(0); i++) {
    output[i] = new string[input.GetLength(1)];
    for (int j = 0; j < input.GetLength(1); j++) {
      output[i][j] = input[i, j];
    }
  }
  return output;
}