小编key*_*eyr的帖子

使用ReferenceLoopHandling.Ignore序列化循环相关的ISerializable对象时抛出StackOverflowException

我有一个使用二进制序列化来保存数据的遗留应用程序.现在我们想使用Json.net 4.5来序列化数据,而不需要对现有类进行太多更改.

事情很顺利,直到我们打了一个循环的依赖类.有没有解决此问题的解决方法?

示例代码如下所示

[Serializable]
class Department : ISerializable
{
    public Employee Manager { get; set; }
    public string Name { get; set; }

    public Department() { }
    public Department( SerializationInfo info, StreamingContext context )
    {
        Manager = ( Employee )info.GetValue( "Manager", typeof( Employee ) );
        Name = ( string )info.GetValue( "Name", typeof( string ) );
    }
    public void GetObjectData( SerializationInfo info, StreamingContext context )
    {
        info.AddValue( "Manager", Manager );
        info.AddValue( "Name", Name );
    }
}

[Serializable]
class Employee : …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization json json.net

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

Json.net:JObject.SelectToken可以做XPath可以做的事情吗?如果是,语法是什么?

2009年发布的查询的答案是使用一个JObject.SelectToken应该提供XPath类似功能的新功能.我现在使用的是JSON.NET 4.5 R11,SelectToken方法可用.

但是我找不到关于要传递给SelectToken函数的路径字符串的文档(基本上是语法).

下面的代码生成一个Json字符串,我想在其上执行类似Xpath的方法(据我所知SelectToken)

IList branches = new ArrayList();
IList employees = new ArrayList();
employees.Add(new { EmpId = 1, Name = "Name1" });
employees.Add(new { EmpId = 2, Name = "Name2" });
employees.Add(new { EmpId = 3, Name = "Name3" });
IList employees2 = new ArrayList();
employees2.Add(new { EmpId = 4, Name = "Name1" });
employees2.Add(new { EmpId = 5, Name = "Name5" });
branches.Add(new { BranchName …
Run Code Online (Sandbox Code Playgroud)

c# regex xml xpath json.net

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

Json.net:序列化/反序列化不适用于具有循环引用的 ISerialized 对象

一段时间前,我报告了一个问题,我已在 Json.net 4.5 R11 中修复了该问题。

如果我的循环引用属性Manager为 NULL,则序列化和反序列化工作正常。

但是,当循环引用属性Manager设置为 NON NULL 值时,它会在序列化字符串中被忽略,因此会在反序列化时引发异常。

Json.net 问题库说问题出在您的代码中,但我无法弄清楚。有人可以帮我吗?

问题:

  1. 下面的代码有问题吗?
  2. 如果是的话我应该怎么做才能解决这个问题?
  3. 如果不是那么应该在 Json.net 代码中做什么来解决这个问题?

更多更新:当前使用二进制序列化的遗留应用程序需要此更新。由于变化巨大,用Json序列化标签标记所有涉及序列化的私有字段的工作量太大。由于 Json.net 可以对 ISerialized 对象进行序列化,因此我们希望这样做。如果没有循环引用对象,这将起作用。

我的课程

[Serializable]
class Department : ISerializable
{
    public Employee Manager { get; set; }
    public string Name { get; set; }

    public Department() { }

    public Department( SerializationInfo info, StreamingContext context )
    {
        Manager = ( Employee )info.GetValue( "Manager", typeof( Employee ) ); //Manager's data not found since json …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization json json.net

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

标签 统计

c# ×3

json.net ×3

.net ×2

json ×2

serialization ×2

regex ×1

xml ×1

xpath ×1