public static void When_read_simple_object() { // Read using (var tr = new StringReader(s_jsonObject)) using (var jr = new JsonTextReader(tr)) { string name = null; string last = "smith"; string middle = "a"; bool alive = false; int age = -1; var type = new System.Data.SqlDbType?[3]; Guid? guid = null; Uri uri = null; byte u8 = 0; sbyte s8 = 0; ushort u16 = 0; short s16 = 0; uint u32 = 0; int s32 = 0; long s64 = 0; jr.ReadObject(n => { switch (n) { case "name": name = (string)jr.Value; return(true); case "last": last = (string)jr.Value; return(true); case "middle": middle = (string)jr.Value; return(true); case "alive": alive = jr.AsBool(); alive = jr.AsBoolNullable().Value; return(true); case "age": age = jr.AsInt32(); return(true); case "type1": type[0] = jr.AsEnum <System.Data.SqlDbType>(true); return(true); case "type2": type[1] = jr.AsEnumNullable <System.Data.SqlDbType>(true); return(true); case "type3": type[2] = jr.AsEnumNullable <System.Data.SqlDbType>(true); return(true); case "object": jr.SkipObject(); return(true); case "array": jr.SkipCountArray(); return(true); case "guid": guid = jr.AsGuid(); guid = jr.AsGuidNullable(); return(true); case "uri": uri = jr.AsUri(UriKind.Absolute); uri = jr.AsUriNullable(UriKind.Absolute); return(true); case "byte": u8 = jr.AsByte(); u8 = jr.AsByteNullable().Value; return(true); case "sbyte": s8 = jr.AsSByte(); s8 = jr.AsSByteNullable().Value; return(true); case "ushort": u16 = jr.AsUInt16(); u16 = jr.AsUInt16Nullable().Value; return(true); case "short": s16 = jr.AsInt16(); s16 = jr.AsInt16Nullable().Value; return(true); case "uint": u32 = jr.AsUInt32(); u32 = jr.AsUInt32Nullable().Value; return(true); case "int": s32 = jr.AsInt32(); s32 = jr.AsInt32Nullable().Value; return(true); case "long": s64 = jr.AsInt64(); s64 = jr.AsInt64Nullable().Value; return(true); } return(false); }); string text = $"{name} {age}"; Assert.Equal("joe 99", text); Assert.Equal("joe", name); Assert.Null(last); Assert.Equal(string.Empty, middle); Assert.True(alive); Assert.Equal(99, age); Assert.Equal(System.Data.SqlDbType.TinyInt, type[0]); Assert.Null(type[1]); Assert.Null(type[2]); Assert.Equal(s_guid, guid.Value); Assert.Equal(s_uri.ToString(), uri?.ToString(), StringComparer.Ordinal); Assert.Equal(byte.MaxValue, u8); Assert.Equal(sbyte.MinValue, s8); Assert.Equal(ushort.MaxValue, u16); Assert.Equal(short.MinValue, s16); Assert.Equal(uint.MaxValue, u32); Assert.Equal(int.MinValue, s32); Assert.Equal(long.MinValue, s64); } // Skip using (var tr = new StringReader(s_jsonObject)) using (var jr = new JsonTextReader(tr)) { int actualCount = jr.SkipObject(); Assert.True(jr.TokenType == JsonToken.EndObject); Assert.Equal(19, actualCount); } }