[英]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
指示序列化引擎在讀取或反序列化時必須存在成員 。 因此,應同時使用EmitDefaultValue
和IsRequired
這兩個屬性。 IsRequired = false
的默認值IsRequired = false
。 因此,您不能使用EmitDefaultValue=false
和IsRequired=true
類的組合,在這種情況下,序列化引擎將引發異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.