繁体   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