序列化不规则数组与多维数组的区别

3
我有一个Array类型的object(即object.GetType().IsArray返回true)。我的问题是如何确定它是交错数组还是多维数组?是否有一种方法可以序列化数组,以便代码“不知道”区别(使用反射)?
请注意,数组长度/维度是任意的。我想也许可以解析Type.Name来搜索[,(如[,,]的一部分)或[][]来区分它们-但这仍然意味着对于每种情况,我将有两个代码路径,并且我觉得应该有更好的方法来完成这个任务而不是解析类型名称。
对于交错数组,似乎很容易采用数组并使用[]进行索引以迭代所有元素,但是这种方法对于多维数组不起作用。

你正在编写自定义序列化机制吗?为什么不使用内置于.NET框架中的几个选项呢? - Robert Levy
这主要是一个学习练习 :) - nickolayratchev
尝试查看DataContractSerializer的定制选项。 - Saravanan
1个回答

2

嵌套数组是指数组中包含其他数组。所以,您只需查看元素类型并检查它是否也是一个数组:

    static bool IsJaggedArray(object obj) {
        var t = obj.GetType();
        return t.IsArray && t.GetElementType().IsArray;
    }

    static void Test() {
        var a1 = new int[42];
        Debug.Assert(!IsJaggedArray(a1));
        var a2 = new int[4, 2];
        Debug.Assert(!IsJaggedArray(a2));
        var a3 = new int[42][];
        Debug.Assert(IsJaggedArray(a3));
    }

将其转换为数组并使用Rank属性查找多维数组的维数。

我发现我还可以使用Array.Rank来确定一个数组是否为多维的(当Rank > 1时为真)。这非常好用,谢谢! - nickolayratchev

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