簡體   English   中英

序列化為JSON時將忽略DataMember

[英]DataMember ignored when serializing to JSON

我已將DataMemeber添加到我的對象屬性中,以在序列化為JSON時更改設置,但是未使用它們。 我試圖更改名稱以及發出默認值。

我嘗試執行此操作的原因是,如果屬性為默認值,則我想忽略該屬性。

我試圖使用Microsoft庫而不是Newtonsoft庫。

    <DataMember(EmitDefaultValue:=True, IsRequired:=False, Name:="addressTable")> Public Property addressTable() As String
        Get
            Return _AddressTable
        End Get
        Set(ByVal value As String)
            _AddressTable = value
        End Set
    End Property


Public Function gObjToStr(ByVal InputObject As Object) As String

    Dim stream1 As New IO.MemoryStream
    Dim ser As Runtime.Serialization.Json.DataContractJsonSerializer = New Runtime.Serialization.Json.DataContractJsonSerializer(InputObject.GetType)

    ser.WriteObject(stream1, InputObject)
    stream1.Position = 0

    Dim sr As New IO.StreamReader(stream1)
    Dim OutString As String = Nothing

    Return sr.ReadToEnd

End Function

您需要從屬性addressTable刪除EmitDefaultValue屬性。

基本上, EmitDefaultValue 告訴序列化引擎是否要序列化要序列化的字段或屬性的默認值

EmitDefaultValue的默認值為true,因此即使某個屬性具有默認值,它也會被序列化。 根據您的要求,如果需要忽略屬性,如果它具有默認值,則需要向屬性添加屬性EmitDefaultValue並將該值設置為false [DataMember(EmitDefaultValue =false)] 在上面發布的代碼中,您已設置EmitDefaultValue = true ,因此它將在序列化中生成addressTable

同樣, IsRequired 指示序列化引擎在讀取或反序列化時必須存在成員 因此,應同時使用EmitDefaultValueIsRequired這兩個屬性。 IsRequired = false的默認值IsRequired = false 因此,您不能使用EmitDefaultValue=falseIsRequired=true類的組合,在這種情況下,序列化引擎將引發異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM