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
为真)。这非常有效,谢谢!