You do not need a custom converter for this case
System Text Json already supports ignoring properties that should not be written
The important detail is that an empty string is not considered a default value
So you need to explicitly define when the property should be written
A simple way is to add a ShouldSerialize pattern to your class
The serializer will only include the property if that method returns true
Example idea without full code
Define your string property like normal
Add a method named ShouldSerializeStringProp that returns false if the string is empty
During serialization the property will be skipped and the JSON remains valid
If you are configuring JsonSerializerOptions globally you can also use
DefaultIgnoreCondition set to WhenWritingDefault
but then make sure the empty string is treated as a default value in your model
Either of these approaches will give you valid JSON without the unwanted property when it has an empty value