2016-04-25 46 views
0

JSONにシリアル化するときに設定を変更するために、オブジェクトプロパティにDataMemeberを追加しましたが、使用していません。私はデフォルト値を出すだけでなく、名前を変更しようとしました。JSONにシリアライズするときにDataMemberが無視される

これを実行しようとする私の理由は、プロパティがデフォルト値の場合、そのプロパティを無視したいということです。

私は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

シリアライズのコードを投稿したり、WCFを使用していますか? – Agalo

+0

シリアライズコード – KnightsOfTheRoun

答えて

0

あなたは、プロパティaddressTableからEmitDefaultValue属性を削除する必要があります。

基本的にEmitDefaultValueは、シリアル化されるフィールドまたはプロパティのデフォルト値をシリアル化するかどうかを逐次化エンジンに指示します。

EmitDefaultValueのデフォルト値はtrueです。したがって、プロパティにデフォルト値が設定されていても、それはシリアル化されます。要件に応じて、プロパティを無視する必要がある場合、デフォルト値がある場合は、属性にEmitDefaultValueという属性を追加し、値を偽として設定する必要があります。[DataMember(EmitDefaultValue =false)]上記のコードでは、EmitDefaultValue = trueを設定しているため、シリアル化でaddressTableを生成しています。

また、IsRequiredは、の読み取りまたはデシリアライズ時にメンバーが存在する必要があることをシリアル化エンジンに指示します。したがって、両方の属性の使用には注意が必要ですEmitDefaultValue & IsRequiredIsRequired = falseのデフォルト値。したがって、EmitDefaultValue=falseIsRequired=trueのような組み合わせはできません。この場合、シリアライズエンジンは例外をスローします。

+0

で更新しました。私はEmitのように扱っていましたが、私は休暇が必要だと思います。働いてくれてありがとう。 – KnightsOfTheRoun

関連する問題