C# 序列化交错数组与多维数组

C# 序列化交错数组与多维数组,c#,reflection,multidimensional-array,jagged-arrays,C#,Reflection,Multidimensional Array,Jagged Arrays,我有一个对象类型为数组(即object.GetType().IsArray返回true)。我的问题是如何确定它是锯齿数组还是多维数组?是否有一种方法可以序列化数组,使代码“不知道”差异(使用反射) 请注意,该数组具有任意长度/维度。我想我也许可以解析Type.Name来搜索[,(如[,]的一部分)或[][]来区分它们——但这仍然意味着对于每种情况我都有两个代码路径,我觉得应该有比解析类型名更好的方法来完成这一任务 对于锯齿状数组,似乎很容易获取数组,然后使用[]对其进行索引,以迭代所有元素,但是

我有一个
对象
类型为
数组
(即
object.GetType().IsArray
返回true)。我的问题是如何确定它是锯齿数组还是多维数组?是否有一种方法可以序列化数组,使代码“不知道”差异(使用反射)

请注意,该数组具有任意长度/维度。我想我也许可以解析
Type.Name
来搜索
[,
(如
[,]
的一部分)或
[][]
来区分它们——但这仍然意味着对于每种情况我都有两个代码路径,我觉得应该有比解析类型名更好的方法来完成这一任务


对于锯齿状数组,似乎很容易获取数组,然后使用
[]
对其进行索引,以迭代所有元素,但是,这种方法不适用于多维数组。

锯齿状数组是数组的数组。因此,您只需查看元素类型并检查它是否也是数组:

    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属性查找多维数组的维度数。

您正在编写自定义序列化机制?为什么不使用.net framework内置的几个选项之一?这主要是一个学习练习:)尝试查看DataContractSerializerI图的自定义选项我还可以使用
Array.Rank
来确定数组是否是多维的(其中
Rank>1
为真)。这非常有效,谢谢!