private void ReadDatum(Datum datum, ReadAs?readAs = null) { if (ReadAsSpecialType(datum, readAs)) { return; } switch (datum.type) { case Datum.DatumType.R_NUM: SetToken(JsonToken.Float, datum.r_num); return; case Datum.DatumType.R_STR: SetToken(JsonToken.String, datum.r_str); return; case Datum.DatumType.R_BOOL: SetToken(JsonToken.Boolean, datum.r_bool); return; case Datum.DatumType.R_NULL: SetToken(JsonToken.Null); return; //The datum stores more structure case Datum.DatumType.R_ARRAY: SetToken(JsonToken.StartArray); stack.Push(new DatumReaderToken(datum)); return; case Datum.DatumType.R_OBJECT: SetToken(JsonToken.StartObject); stack.Push(new DatumReaderToken(datum)); return; default: Demand.Require(true, "Unknown handing datum type {0}.", datum.type); return; } }