相关疑难解决方法(0)

无法保留对数组或只读列表或从非默认构造函数创建的列表的引用

我遇到了以下问题,该问题与我遇到的问题大体相同:

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

但是,我的情况略有不同。如果我修改该Test问题的类以使其具有相同类型的array属性,则会收到相同的反序列化错误。

class Test
{
    public Test[] Tests;
}

var settings = new JsonSerializerSettings
{
    PreserveReferencesHandling = PreserveReferencesHandling.All
};

var o = new Test { Tests = new[] { new Test(), new Test() } };
//var o = new Test(); //this works if I leave the Tests array property null
var arr = new[] { o, o };
var ser = JsonConvert.SerializeObject(arr, settings);

arr = ((JArray)JsonConvert.DeserializeObject(ser, settings)).ToObject<Test[]>();
Run Code Online (Sandbox Code Playgroud)

我敢打赌,我缺少该属性的重要属性Tests

.net serialization json.net

4
推荐指数
1
解决办法
1573
查看次数

序列化时JSON.NET StackOverflowException

当我尝试序列化具有类似结构的对象时,我的C#程序正在运行StackOverflowException:

  • 对象具有互相引用的成员
  • 无法尝试捕获(idk为什么)
  • 如果计数设置为6500以下(可能因计算机而异),则表示已成功序列化

下面的示例代码:

class Chacha
{
    public Chacha NextChacha { get; set; }
}    
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.All,
    PreserveReferencesHandling = PreserveReferencesHandling.Objects,
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};

static void Main(string[] args)
{
        int count = 15000;

        Chacha[] steps = new Chacha[count];
        steps[0] = new Chacha();

        for (int i = 1; i < count; i++)
        {
            steps[i] = new Chacha();
            steps[i-1].NextChacha = steps[i];
        }

        string serSteps = JsonConvert.SerializeObject(steps, Settings);
}
Run Code Online (Sandbox Code Playgroud)

JSON.NET版本是:9.0.1
.NET Framework:4.5.2有什么 …

c# stack-overflow serialization json.net

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

标签 统计

json.net ×2

serialization ×2

.net ×1

c# ×1

stack-overflow ×1