我已将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
答案 0 :(得分:0)
您需要从属性EmitDefaultValue
中删除addressTable
属性。
基本上,EmitDefaultValue
告诉序列化引擎是否序列化要序列化的字段或属性的默认值。
EmitDefaultValue
的默认值为true,因此即使属性具有默认值,也会将其序列化。根据您的要求,如果您需要忽略属性,如果它具有默认值,则需要将属性EmitDefaultValue
添加到属性并将值设置为false [DataMember(EmitDefaultValue =false)]
。在上面发布的代码中,您设置了EmitDefaultValue = true
,因此它在序列化中生成了addressTable
。
此外,IsRequired
指示序列化引擎在读取或反序列化时必须存在该成员。所以你应该小心使用属性EmitDefaultValue
和&amp; IsRequired
。 IsRequired = false
的默认值。因此,您不能拥有EmitDefaultValue=false
和IsRequired=true
这样的组合,在这种情况下,序列化引擎会抛出异常。