DataContract +多维数组 - 任何解决方案?

时间:2011-10-28 15:53:28

标签: c# serialization multidimensional-array datacontractserializer datacontract

来自MSDN

  

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

因此,如果您无法正常序列化多维数组,那么如何有效地解决这个问题呢?我的想法是有一个属性使数组变平并序列化该集合并在反序列化过程中解除它,但我不确定这是否有效?

之前有人找到解决方案吗?


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

3 个答案:

答案 0 :(得分:3)

是的,无论什么更方便,你都可以将它弄平或者锯齿状。

答案 1 :(得分:3)

每当你翻阅2-D数组时,你就会花费O(n)努力(或输入中每个项目一个“处理”单位)。如你所说,在2-D和1-D之间进行转换并没有太大的麻烦。除非您处理的数量非常大(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];
           }
       }

答案 2 :(得分:3)

可能使用扩展方法:

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;
}
相关问题