public override bool GetMemberAndWriteJson(object obj, ref WriteStack state, Utf8JsonWriter writer) { bool success; T value = Get !(obj); if (value == null) { Debug.Assert(s_defaultValue == null && Converter.CanBeNull); success = true; if (!IgnoreDefaultValuesOnWrite) { if (!Converter.HandleNull) { writer.WriteNullSection(EscapedNameSection); } else { // No object, collection, or re-entrancy converter handles null. Debug.Assert(Converter.ClassType == ClassType.Value); if (state.Current.PropertyState < StackFramePropertyState.Name) { state.Current.PropertyState = StackFramePropertyState.Name; writer.WritePropertyNameSection(EscapedNameSection); } int originalDepth = writer.CurrentDepth; Converter.Write(writer, value, Options); if (originalDepth != writer.CurrentDepth) { ThrowHelper.ThrowJsonException_SerializationConverterWrite(Converter); } } } } else if (IgnoreDefaultValuesOnWrite && Converter._defaultComparer.Equals(s_defaultValue, value)) { Debug.Assert(s_defaultValue != null && !Converter.CanBeNull); success = true; } else { if (state.Current.PropertyState < StackFramePropertyState.Name) { state.Current.PropertyState = StackFramePropertyState.Name; writer.WritePropertyNameSection(EscapedNameSection); } success = Converter.TryWrite(writer, value, Options, ref state); } return(success); }