private void DetermineIgnoreCondition(BinaryIgnoreCondition?ignoreCondition, bool defaultValueIsNull) { if (ignoreCondition != null) { Debug.Assert(MemberInfo != null); Debug.Assert(ignoreCondition != BinaryIgnoreCondition.Always); if (ignoreCondition == BinaryIgnoreCondition.WhenWritingDefault) { IgnoreDefaultValuesOnWrite = true; } else if (ignoreCondition == BinaryIgnoreCondition.WhenWritingNull) { if (defaultValueIsNull) { IgnoreDefaultValuesOnWrite = true; } else { ThrowHelper.ThrowInvalidOperationException_IgnoreConditionOnValueTypeInvalid(this); } } } else if (Options.IgnoreNullValues) { Debug.Assert(Options.DefaultIgnoreCondition == BinaryIgnoreCondition.Never); if (defaultValueIsNull) { IgnoreDefaultValuesOnRead = true; IgnoreDefaultValuesOnWrite = true; } } else if (Options.DefaultIgnoreCondition == BinaryIgnoreCondition.WhenWritingNull) { Debug.Assert(!Options.IgnoreNullValues); if (defaultValueIsNull) { IgnoreDefaultValuesOnWrite = true; } } else if (Options.DefaultIgnoreCondition == BinaryIgnoreCondition.WhenWritingDefault) { Debug.Assert(!Options.IgnoreNullValues); IgnoreDefaultValuesOnWrite = true; } }