我今天遇到了一个意想不到的问题,试图序列化/反序列化包含bool [,] DataMember的DataContract.csc和运行时都没有反对这个定义,但是反序列化的bool [,] DataMember中的值只是不正确.读完这个帖子之后,我最初的反应是将有问题的属性转换为锯齿状数组.我不得不很快放弃这种方法,但是因为这篇文章告诉我,当对角线或随机访问时(参与我的用例),锯齿状数组表现不佳.所以我最终编写了上述msdn线程中提出的解决方案的策划版本(将矩形转换为锯齿状,反之亦然,导出/导入,请参阅下面的代码摘录),这样可以正常工作.
public object GetDeserializedObject(object obj, Type targetType)
{
if (obj is GridArrayWrapper)
{
bool[,] arr;
GridArrayWrapper wrapper = (GridArrayWrapper)obj;
if (wrapper.Array == null) return null;
int d0 = wrapper.Array.Length;
if (d0 == 0)
{
return new bool[0, 0];
}
var d1 = wrapper.Array[0].Length;
arr = new bool[d0, d1];
for (int i = 0; i < d0; i++)
{
if (wrapper.Array[i].Length != d1) throw new ArgumentException("Not a rectangular array");
for (var j = …Run Code Online (Sandbox Code Playgroud) c# ×1