如何在序列化时将循环值设置为null

3
我找不到一个适合我的问题的标题。 我有如下的类:
class Employee
{
    public string Name { get; set; }
    public List<Employee> Subordinates { get; set; }
} 

如果我将这个类对象序列化,它看起来应该像下面这样。
[
  {
    "Name": "first person",
    "Subordinates": [
      {
        "Name": "second person",
        "Subordinates": null
      }
    ]
  },
  {
    "Name": "second person",
    "Subordinates": null
  }
]

但我需要它像这样

[
  {
    "Name": "first person",
    "Subordinates": null
  },
  {
    "Name": "second person",
    "Subordinates": null
  }
]

如何获取这个? 我不仅使用这个类。我有很多像员工这样的类,所以我需要一个解决方案适用于所有我的类。 我正在使用下面的代码来处理一个类。我知道这不是一个解决方案,但我没有找到更好的解决方案。

var employees = //sql query .ToList()
foreach(var item in employees){
    item.Subordinates = null;
}

返回 Json(员工)


1
你可以调整 var employees = //sql query .ToList(),为此提供 SQL 查询或 Linq 查询。 - Viplock
1
问题在于,“第一人称”似乎有一个从属的“第二人称”。为什么不解决这个问题呢? - NicoRiff
NicoRiff:问题在于对输出进行天真的反序列化将导致“第二人称”有两个不同的实例,这是不希望看到的。期望尊重实例的分层引用。 - Codor
@Viplock 你能举个例子吗? 比如,我使用类似于 var employess = db.employees.ToList() 的代码。 - Sinan Barut
让我为您添加一个正式的答案,如果您有任何问题,请更新我。 - Viplock
显示剩余3条评论
1个回答

1

根据您使用的序列化程序不同,解决方案也会有所不同。

尝试将 List 属性添加 [NonSerialized][XmlIgnore][ScriptIgnore]


谢谢。是的,这是一个解决方案,但我不想用它。因为我将来会使用这个深度。我在考虑创建一个WebApi,所以如果我使用它,我需要多次请求一个json。 - Sinan Barut
然后您可以使用该属性,当您需要WebAPI时,请将其删除。 - Ivan Sanz Carasa
我认为我可以使用它一段时间。谢谢 :) - Sinan Barut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接