2016-04-25 4 views
0

Я добавил DataMemeber в мои свойства объекта, чтобы изменить настройки при сериализации в JSON, однако он не использует их. Я попытался изменить имя, а также исправить значения по умолчанию.DataMember игнорируется при сериализации в 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

Можете ли вы также опубликовать код для сериализации или использовать WCF? – Agalo

+0

Обновлено кодом сериализации – KnightsOfTheRoun

ответ

0

Вы должны удалить атрибут EmitDefaultValue из собственности addressTable.

В принципе, EmitDefaultValueсообщает механизму сериализации, следует ли сериализовать значение по умолчанию для поля или свойства, которое сериализуется.

Значение по умолчанию для EmitDefaultValue истинно, поэтому даже если свойство имеет значение по умолчанию, оно будет сериализовано. Согласно вашему требованию, если вам нужно игнорировать свойство, если оно имеет значение по умолчанию, вам необходимо добавить атрибут EmitDefaultValue в Свойство и установить значение как false, [DataMember(EmitDefaultValue =false)]. В приведенном выше коде вы установили EmitDefaultValue = true, следовательно, он генерирует addressTable в разделе «Сериализация».

Кроме того, IsRequiredинструктирует механизм сериализации, что элемент должен присутствовать при чтении или десериализации. Поэтому вы должны быть осторожны с использованием обоих атрибутов EmitDefaultValue & IsRequired. Значение по умолчанию для IsRequired = false. Таким образом, у вас не может быть такой комбинации, как EmitDefaultValue=false и IsRequired=true, в этом случае механизм Serialization выдаст исключение.

+0

Я лечил Emit, как Omit ..... Я думаю, мне нужен отпуск. Спасибо, что сработали. – KnightsOfTheRoun

Смежные вопросы