2016-04-25 19 views
0

Ich habe DataMeber zu meinen Objekteigenschaften hinzugefügt, um die Einstellungen beim Serialisieren in JSON zu ändern, sie werden jedoch nicht verwendet. Ich habe versucht, den Namen zu ändern und Standardwerte auszugeben.DataMember wird beim Serialisieren nach JSON ignoriert

Mein Grund dafür ist, ich möchte eine Eigenschaft ignorieren, wenn es auf dem Standardwert ist.

Ich versuche, die Microsoft-Bibliotheken und nicht die Newtonsoft-Bibliotheken zu verwenden.

<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

Können Sie auch den Code für die Serialisierung eingeben oder verwenden Sie WCF? – Agalo

+0

Aktualisiert mit Serialisierungscode – KnightsOfTheRoun

Antwort

0

Sie müssen das EmitDefaultValue Attribut aus dem Property addressTable entfernen.

Grundsätzlich EmitDefaultValueteilt dem Serialisierungsmodul, ob der Standardwert für ein Feld oder eine Eigenschaft sein serialisierten serialisieren.

Der Standardwert für EmitDefaultValue ist wahr. Selbst wenn eine Eigenschaft einen Standardwert hat, wird sie serialisiert. Gemäß Ihrer Anforderung müssen Sie, wenn Sie eine Eigenschaft ignorieren müssen, das Attribut EmitDefaultValue der Eigenschaft hinzufügen und den Wert als false festlegen, [DataMember(EmitDefaultValue =false)]. In dem oben angegebenen Code haben Sie die EmitDefaultValue = true festgelegt, daher wird die addressTable in Serialisierung generiert.

Außerdem weist IsRequireddie Serialisierungs-Engine an, dass das Element beim Lesen oder Deserialisieren vorhanden sein muss. Daher sollten Sie bei der Verwendung der beiden Attribute EmitDefaultValue & IsRequired vorsichtig sein. Der Standardwert für IsRequired = false. Sie können also keine Kombination wie EmitDefaultValue=false und IsRequired=true haben, in diesem Fall würde die Serialisierungs-Engine eine Ausnahme auslösen.

+0

Ich behandelte Emit wie Omit ..... Ich denke, ich brauche einen Urlaub. Danke, das hat funktioniert. – KnightsOfTheRoun

Verwandte Themen