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

Posted

技术标签:

【中文标题】序列化时如何为循环值设置null【英文标题】:How to set null for looping value when serialize 【发布时间】: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 的代码,你的解决方案可以从那里得到 【参考方案1】:

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

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

【讨论】:

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

以上是关于序列化时如何为循环值设置null的主要内容,如果未能解决你的问题,请参考以下文章

使用 protobuf-net 序列化数组时如何处理空值?

更新CoreData模型版本时如何为实体的新属性设置默认值

如何为复杂的 Json 有效负载设置属性及其值并进行序列化?

在 clickhouse 中,使用强制转换函数时如何为可为空的列返回 null

滚动时如何为 recyclerview 项目设置动画?

弹出键盘时如何为 UITableView 设置动画?