相关疑难解决方法(0)

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

我用一个字段创建了一个简单的类. class Test{int value;}

如果我使用"保留引用"功能并将其设置为"all"(即对象和数组),那么当我简单地序列化一个Test对象数组时,它会被序列化为一个带有特殊"$ values"成员的JSON对象使用数组值以及预期的"$ id"属性来保留数组引用.这很好,但是整个事情再一次打破了反序列化.

单步执行源代码,我发现只是因为" IsReadOnlyOrFixedSize" 的测试是真的,它将标志" createdFromNonDefaultConstructor"设置为true,这甚至没有任何意义,因为虽然它是一个固定大小的数组,但它是从默认构造函数,除非它将任何固定大小的数组构造函数视为非默认构造函数.最重要的是,它应该能够处理如此基本的东西,但却抛出了这个错误:" Cannot preserve reference to array or readonly list, or list created from a non-default constructor".

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

arrays json.net strong-typing deserialization

6
推荐指数
1
解决办法
1676
查看次数

Array.IsReadOnly不一致,具体取决于接口实现

一个类型数组同时实现System.Collections.IListSystem.Collections.Generic.ICollection<T>接口,都有自己的IsReadOnly特性.但到底是怎么回事?

var array = new int[10];
Console.WriteLine(array.IsReadOnly); // prints "False"

var list = (System.Collections.IList)array;
Console.WriteLine(list.IsReadOnly); // prints "False"

var collection = (System.Collections.Generic.ICollection<int>)array;
Console.WriteLine(collection.IsReadOnly); // prints "True"
Run Code Online (Sandbox Code Playgroud)

IList阵列的视图表现为我预计,返回相同的阵列本身,但是ICollection<T>该阵列的视图返回true.

这种行为有没有合理的解释,还是编译器/ CLR错误?(如果是后者,我会感到非常惊讶,因为你会想象之前会发现这种情况,但这是违反直觉的,我无法想到解释可能是什么......).

我正在使用C#3.0/.NET 3.5 SP1.

.net .net-3.5 c#-3.0

5
推荐指数
2
解决办法
552
查看次数

自定义对象序列化与 PreserveReferencesHandling

是否有任何标准方法可以"$id"在序列化时获取当前对象的字段值,并"$id"在使用自定义时反序列化时通过其值获取对象JsonConverter

.net c# json.net

3
推荐指数
1
解决办法
460
查看次数

标签 统计

.net ×2

json.net ×2

.net-3.5 ×1

arrays ×1

c# ×1

c#-3.0 ×1

deserialization ×1

strong-typing ×1