/// <summary> /// Parses the value. /// </summary> /// <param name="asDictionaryKey">If set to <c>true</c> [as dictionary key].</param> /// <param name="cache">The cache.</param> /// <returns> /// The parsed value. /// </returns> public override object ParseVal(bool asDictionaryKey, ReadCache cache) { switch (jp.TokenType) { case JsonToken.Integer: return(ParseLong()); case JsonToken.StartArray: return(ParseList(asDictionaryKey, cache, null)); case JsonToken.StartObject: return(ParseDictionary(asDictionaryKey, cache, null)); case JsonToken.PropertyName: case JsonToken.String: return(cache.CacheRead((string)jp.Value, asDictionaryKey, this)); case JsonToken.Float: case JsonToken.Boolean: return(jp.Value); case JsonToken.Null: return(null); case JsonToken.Bytes: case JsonToken.Comment: case JsonToken.Date: case JsonToken.EndArray: case JsonToken.EndConstructor: case JsonToken.EndObject: case JsonToken.None: case JsonToken.Raw: case JsonToken.StartConstructor: case JsonToken.Undefined: default: return(null); } }
/// <summary> /// Parses the value. /// </summary> /// <param name="asDictionaryKey">If set to <c>true</c> [as dictionary key].</param> /// <param name="cache">The cache.</param> /// <returns> /// The parsed value. /// </returns> public override object ParseVal(bool asDictionaryKey, ReadCache cache) { switch (jp.TokenType) { case JsonToken.Integer: return ParseLong(); case JsonToken.StartArray: return ParseList(asDictionaryKey, cache, null); case JsonToken.StartObject: return ParseDictionary(asDictionaryKey, cache, null); case JsonToken.PropertyName: case JsonToken.String: return cache.CacheRead((string)jp.Value, asDictionaryKey, this); case JsonToken.Float: case JsonToken.Boolean: return jp.Value; case JsonToken.Null: return null; case JsonToken.Bytes: case JsonToken.Comment: case JsonToken.Date: case JsonToken.EndArray: case JsonToken.EndConstructor: case JsonToken.EndObject: case JsonToken.None: case JsonToken.Raw: case JsonToken.StartConstructor: case JsonToken.Undefined: default: return null; } }
public void TestReadCache() { ReadCache rc = new ReadCache(); Assert.AreEqual("~:foo", rc.CacheRead("~:foo", false)); Assert.AreEqual("~:foo", rc.CacheRead("^" + (char)WriteCache.BaseCharIdx, false)); Assert.AreEqual("~$bar", rc.CacheRead("~$bar", false)); Assert.AreEqual("~$bar", rc.CacheRead("^" + (char)(WriteCache.BaseCharIdx + 1), false)); Assert.AreEqual("~#baz", rc.CacheRead("~#baz", false)); Assert.AreEqual("~#baz", rc.CacheRead("^" + (char)(WriteCache.BaseCharIdx + 2), false)); Assert.AreEqual("foobar", rc.CacheRead("foobar", false)); Assert.AreEqual("foobar", rc.CacheRead("foobar", false)); Assert.AreEqual("foobar", rc.CacheRead("foobar", true)); Assert.AreEqual("foobar", rc.CacheRead("^" + (char)(WriteCache.BaseCharIdx + 3), true)); Assert.AreEqual("abc", rc.CacheRead("abc", false)); Assert.AreEqual("abc", rc.CacheRead("abc", false)); Assert.AreEqual("abc", rc.CacheRead("abc", true)); Assert.AreEqual("abc", rc.CacheRead("abc", true)); }