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);
        }