Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取JSON文件会将项添加到同一类的另一个属性的列表中_C#_Json - Fatal编程技术网

C# 读取JSON文件会将项添加到同一类的另一个属性的列表中

C# 读取JSON文件会将项添加到同一类的另一个属性的列表中,c#,json,C#,Json,我有一系列的课程,如下所示: public class Class1 : IClass { public List<Class2> Class2List { get { return Class3Instance.Class2List; } } public Class3 Class3Instance { get; set; } } public class Class2 { public string Field1 { get; set; } p

我有一系列的课程,如下所示:

public class Class1 : IClass
{
    public List<Class2> Class2List { get { return Class3Instance.Class2List; } }

    public Class3 Class3Instance { get; set; }
}

public class Class2
{
    public string Field1 { get; set; }
    public int Field2 { get; set;}
}

public class Class3
{
    public List<Class2> Class2List { get; set; }
}
然后,如果我立即反序列化JSON并再次序列化它,我会得到以下结果:

{
  "Class3Instance": {
    "Class2List2": [
      {
        "Field1": "Member1",
        "Field2": 1
      },
      {
        "Field1": "Member2",
        "Field2": 2
      },
      {
        "Field1": "Member3",
        "Field2": 3
      },
      {
        "Field1": "Member4",
        "Field2": 4
      },
      {
        "Field1": "Member5",
        "Field2": 5
      },
      {
        "Field1": "Member1",
        "Field2": 1
      },
      {
        "Field1": "Member2",
        "Field2": 2
      },
      {
        "Field1": "Member3",
        "Field2": 3
      },
      {
        "Field1": "Member4",
        "Field2": 4
      },
      {
        "Field1": "Member5",
        "Field2": 5
      }
    ]
  },
  "Class2List": [
    {
      "Field1": "Member1",
      "Field2": 1
    },
    {
      "Field1": "Member2",
      "Field2": 2
    },
    {
      "Field1": "Member3",
      "Field2": 3
    },
    {
      "Field1": "Member4",
      "Field2": 4
    },
    {
      "Field1": "Member5",
      "Field2": 5
    },
    {
      "Field1": "Member1",
      "Field2": 1
    },
    {
      "Field1": "Member2",
      "Field2": 2
    },
    {
      "Field1": "Member3",
      "Field2": 3
    },
    {
      "Field1": "Member4",
      "Field2": 4
    },
    {
      "Field1": "Member5",
      "Field2": 5
    }
  ]
}
如您所见,当我反序列化JSON时,Class2List成员已被复制。

正如@mortb所说:

问题在于Class3Instance.Class2List的快捷方式,在JSON中序列化的所述列表的任何成员将被添加到快捷方式的引用中,除了所述引用以前在同一JSON文件中的成员之外

这是因为反序列化不知道如何区分Class1中的shorcut引用Class3Instance.Class2List和Class3中的Class2List,因此不知道是否应该忽略快捷方式字段上的序列化或反序列化操作


为了解决这个问题,无论是合同解析器还是将属性[JsonIgnore]设置为快捷方式引用,都可以解决这个问题。

Class2代码丢失了它与此无关,但我也会添加它,谢谢你的提醒,你能发布一个?@aloisdg吗?我试图将我的应用程序中的类结构简化为只与问题相关的类结构,例如你给我看的示例,我应该提供重现问题的JSON还是按预期重现问题的解决方案?@OscarGuillamon:为什么不运行简化的示例来创建序列化输出,然后反序列化该输出。您可以将这些结果包括在问题中,并告诉我们输出是如何出错的。到目前为止,任何想回答你问题的人都必须自己创建这样一个程序,这将花费太多的时间来回答你的问题。
{
  "Class3Instance": {
    "Class2List2": [
      {
        "Field1": "Member1",
        "Field2": 1
      },
      {
        "Field1": "Member2",
        "Field2": 2
      },
      {
        "Field1": "Member3",
        "Field2": 3
      },
      {
        "Field1": "Member4",
        "Field2": 4
      },
      {
        "Field1": "Member5",
        "Field2": 5
      }
    ]
  },
  "Class2List": [
    {
      "Field1": "Member1",
      "Field2": 1
    },
    {
      "Field1": "Member2",
      "Field2": 2
    },
    {
      "Field1": "Member3",
      "Field2": 3
    },
    {
      "Field1": "Member4",
      "Field2": 4
    },
    {
      "Field1": "Member5",
      "Field2": 5
    }
  ]
}
{
  "Class3Instance": {
    "Class2List2": [
      {
        "Field1": "Member1",
        "Field2": 1
      },
      {
        "Field1": "Member2",
        "Field2": 2
      },
      {
        "Field1": "Member3",
        "Field2": 3
      },
      {
        "Field1": "Member4",
        "Field2": 4
      },
      {
        "Field1": "Member5",
        "Field2": 5
      },
      {
        "Field1": "Member1",
        "Field2": 1
      },
      {
        "Field1": "Member2",
        "Field2": 2
      },
      {
        "Field1": "Member3",
        "Field2": 3
      },
      {
        "Field1": "Member4",
        "Field2": 4
      },
      {
        "Field1": "Member5",
        "Field2": 5
      }
    ]
  },
  "Class2List": [
    {
      "Field1": "Member1",
      "Field2": 1
    },
    {
      "Field1": "Member2",
      "Field2": 2
    },
    {
      "Field1": "Member3",
      "Field2": 3
    },
    {
      "Field1": "Member4",
      "Field2": 4
    },
    {
      "Field1": "Member5",
      "Field2": 5
    },
    {
      "Field1": "Member1",
      "Field2": 1
    },
    {
      "Field1": "Member2",
      "Field2": 2
    },
    {
      "Field1": "Member3",
      "Field2": 3
    },
    {
      "Field1": "Member4",
      "Field2": 4
    },
    {
      "Field1": "Member5",
      "Field2": 5
    }
  ]
}