Arrays JSON.NET无法处理简单数组反序列化?

Arrays JSON.NET无法处理简单数组反序列化?,arrays,json.net,deserialization,strong-typing,Arrays,Json.net,Deserialization,Strong Typing,我创建了一个带有一个字段的简单类类测试{int value;} 如果我使用“preserve references”功能并将其设置为“all”(即对象和数组),那么当我简单地序列化一个测试对象数组时,它将被序列化为一个JSON对象,带有一个带有数组值的特殊“$values”成员,以及保留数组引用的预期“$id”属性。这很好,但整个过程再次在反序列化上中断 浏览源代码时,我发现仅仅因为“IsReadOnlyOrFixedSize”的测试为true,它就将一个标志“createdFromNonDef

我创建了一个带有一个字段的简单类<代码>类测试{int value;}

如果我使用“preserve references”功能并将其设置为“all”(即对象和数组),那么当我简单地序列化一个测试对象数组时,它将被序列化为一个JSON对象,带有一个带有数组值的特殊“$values”成员,以及保留数组引用的预期“$id”属性。这很好,但整个过程再次在反序列化上中断

浏览源代码时,我发现仅仅因为“
IsReadOnlyOrFixedSize
”的测试为true,它就将一个标志“
createdFromNonDefaultConstructor
”设置为true,这甚至没有任何意义,因为尽管它是一个固定大小的数组,但它是从默认构造函数创建的,除非它将任何固定大小的数组构造函数视为非默认构造函数。归根结底,它应该能够处理如此基本的内容,但它会抛出以下错误:“
无法保留对数组或只读列表的引用,或从非默认构造函数创建的列表的引用。”


如何在保留JSON.NET中的所有引用的同时反序列化基本数组而不出错?

您很可能缺少对
对象(…)
的调用和类型转换。 这应该起作用:

类测试{public int Value;}
班级计划
{
静态void Main(字符串[]参数)
{
var数组=新测试[2];
var实例=新测试{Value=123};
数组[0]=实例;
数组[1]=实例;
var设置=新的JsonSerializerSettings
{
PreserveReferencesHandling=PreserveReferencesHandling.All
};
string serialized=JsonConvert.serialized对象(数组、设置);
//显式调用ToObject()并强制转换为目标类型
var反序列化=(Test[])((JArray)JsonConvert.DeserializeObject(序列化,设置)).ToObject(typeof(Test[]);
Assert(反序列化[0]。值==123);
}
}

遇到了同样的问题,我使用了
List
而不是
T[]
来修复它。

您解决了问题吗?有关此问题的更一般版本的解决方案,其中数组可能包括递归自引用,请参阅。