Vb.net JSON.NET中的条件对象序列化

Vb.net JSON.NET中的条件对象序列化,vb.net,json.net,Vb.net,Json.net,我一直在试图找到一种方法来忽略一些对象,因为它们是基于某些条件进行序列化的。我所能找到的只是如何使用ShouldSerialize*方法忽略对象的属性,而不是如何忽略整个对象 这里有一个例子可以解释我的情况。一个公司可以有多个员工,这些员工可以是当前员工,也可以是非当前员工 Public Class Company Public Property Name As String Public Property Employees As List(Of Employee) End C

我一直在试图找到一种方法来忽略一些对象,因为它们是基于某些条件进行序列化的。我所能找到的只是如何使用ShouldSerialize*方法忽略对象的属性,而不是如何忽略整个对象

这里有一个例子可以解释我的情况。一个公司可以有多个员工,这些员工可以是当前员工,也可以是非当前员工

Public Class Company
    Public Property Name As String
    Public Property Employees As List(Of Employee)
End Class

Public Class Employee
    Public Property FirstName As List(Of Name)
    Public Property LastName As List(Of Name)
    Public Property Current As Boolean
End Class
我希望能够忽略/排除序列化为json的非当前员工

我现在唯一能想到的方法是将当前员工和非当前员工分为两个属性,这样我就可以对非当前员工使用

例如:

Public Class Company
    Public Property Name As String
    Public Property CurrentEmployees As List(Of Employee)
    <JsonIgnoreAttribute()>
    Public Property PastEmployees As List(Of Employee)
End Class

Public Class Employee
    Public Property FirstName As List(Of Name)
    Public Property LastName As List(Of Name)
    Public Property Current As Boolean
End Class
上市公司
作为字符串的公共属性名称
公共财产CurrentEmployees作为(员工的)列表
公共财产员工名单(员工名单)
末级
公营雇员
公共财产名称作为列表(名称)
公共财产LastName作为列表(名称)
公共属性当前为布尔值
末级
然而,我试图避免这种情况,因为在我的实际情况中有很多这样的事情,所以我不想将所有列表分成两部分,这将需要大量的代码修改。如果可以在json序列化端完成,那就太好了


谢谢你的帮助。谢谢

Json.Net支持条件序列化。 检查下面的链接以了解实现


Json.NET中似乎没有内置的功能可以让我实现所需的功能。最后,我在Company类中添加了一个函数,该函数在序列化为json之前“清理”不需要的数据

使用前面的示例:

Public Class Company
    Public Property Name As String
    Public Property Employees As List(Of Employee)

    ' Before serializing, call this function
    Public Function GetObjectToSerialize() As Company

        ' Clone the object
        Dim cleanObj As Company = CType(Me.MemberwiseClone, Company)

        If Me.Employees.Count > 0 Then
            cleanObj.Employees = New List(Of Employee)
            For Each empl As Employee In Me.Employees
                ' only include the current employees
                If Not empl.Current Then
                    cleanObj.Employees.Add(empl)
                End If
            Next
        End If
    End Function
End Class

Public Class Employee
    Public Property FirstName As List(Of Name)
    Public Property LastName As List(Of Name)
    Public Property Current As Boolean
End Class
我现在要做的就是,每当我要序列化一个公司对象时,我调用GetObjectToSerialize()函数并序列化返回的对象

Dim objToSave As Company = companyObj.GetObjectToSerialize()
Dim json As String = JsonConvert.SerializeObject(objToSave, Formatting.Indented)

我已经看到了,但这并不是我真正想要的,因为它只允许我在满足条件的情况下忽略整个属性。我需要的是能够始终包含属性,但不是其中的所有项。这不是“条件序列化”,而是有选择地克隆对象的成员,然后序列化整个克隆。你可以用LINQ轻松做到这一点。我认为最初的问题是误导性的