Read & write numbers as strings
By default Huml.Net is strict: numeric targets accept only HUML number scalars, and numbers
serialise as bare numbers. HumlNumberHandling opts into the quoted-string behaviours that
System.Text.Json's JsonNumberHandling provides.
The modes
HumlNumberHandling is a [Flags] enum, so the read and write opt-ins can be combined:
| Value | Effect |
|---|---|
Strict (default, 0) |
Numbers only on read; bare numbers on write. |
AllowReadingFromString |
A quoted string scalar ("42") is coerced to a numeric target during deserialisation. |
WriteAsString |
Finite numeric values are emitted as quoted strings during serialisation. |
NaN, +inf, and -inf are never quoted, regardless of mode.
Global default
Set HumlOptions.NumberHandling to apply a mode to every numeric property:
using Huml.Net.Versioning;
var options = new HumlOptions
{
NumberHandling = HumlNumberHandling.AllowReadingFromString | HumlNumberHandling.WriteAsString,
};
var dto = HumlSerializer.Deserialize<Measurement>("""
%HUML v0.2.0
Value: "12.5"
""", options);
// dto.Value == 12.5 (quoted string coerced because AllowReadingFromString is set)
string huml = HumlSerializer.Serialize(dto, options);
// Value: "12.5" (quoted because WriteAsString is set)
Per-member override
[HumlNumberHandling] overrides the global option for a single property or a whole type, and
takes precedence over HumlOptions.NumberHandling:
using Huml.Net.Serialization;
using Huml.Net.Versioning;
public class Measurement
{
[HumlNumberHandling(HumlNumberHandling.WriteAsString)]
public double Value { get; set; }
// Uses the global HumlOptions.NumberHandling.
public int Samples { get; set; }
}
Notes
- The flags compose:
AllowReadingFromStringaffects only the read direction,WriteAsStringonly the write direction. Combine them for symmetric quoted round-trips. AllowReadingFromStringcoerces; it does not change which CLR types are valid targets — a non-numeric quoted string still throwsHumlDeserializeException.
See also
- Options reference — the
NumberHandlingoption. - Attributes reference —
[HumlNumberHandling]. - Custom converters — for number formats beyond these modes.