【问题标题】:How to set null for looping value when serialize序列化时如何为循环值设置null
【发布时间】:2018-07-11 18:30:57
【问题描述】:

我找不到我的问题的标题。 我的课如下

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;
}

return Json(employess)

【问题讨论】:

  • 你可以调制var employees = //sql query .ToList(),提供sql查询或Linq查询
  • 问题是“第一人称”似乎有一个从属的“第二人称”。为什么不直接解决呢?
  • NicoRiff:问题在于,对输出进行简单的反序列化会导致"second person" 出现两个不同的实例,这是不希望的。希望尊重实例的分层引用。
  • @Viplock 我正在使用 LINQ。在我的 dbcontext 中启用了延迟加载
  • 是提供 linq 的代码,你的解决方案可以从那里得到

标签: c# json asp.net-mvc-4 json.net


【解决方案1】:

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

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

【讨论】:

  • 谢谢。是的,这是一个解决方案,但我不想要这个。因为我将来会使用这个深度。我正在考虑创建一个 WebApi,所以如果我使用它,我需要一个 json 的许多请求
  • 然后您可以使用该属性,当您需要 webapi 时,将其删除
  • 我想我可以用一段时间。谢谢你:)
猜你喜欢
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 2020-10-05
  • 2017-06-21
  • 2016-10-09
  • 1970-01-01
相关资源
最近更新 更多