Tri*_*nko 6 arrays json.net strong-typing deserialization
我用一个字段创建了一个简单的类. 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中的所有引用的同时反序列化基本数组而不会出现错误?
您很可能错过了调用ToObject(...)和类型转换。这应该有效:
class Test { public int Value; }
class Program
{
static void Main(string[] args)
{
var array = new Test[2];
var instance = new Test {Value = 123};
array[0] = instance;
array[1] = instance;
var settings = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.All
};
string serialized = JsonConvert.SerializeObject(array, settings);
// Explicitly call ToObject() and cast to the target type
var deserialized = (Test[]) ((JArray)JsonConvert.DeserializeObject(serialized, settings)).ToObject(typeof(Test[]));
Debug.Assert(deserialized[0].Value == 123);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1676 次 |
| 最近记录: |