예제 #1
0
 internal void WriteToken(JsonReader reader, int initialDepth)
 {
     do
       {
     switch (reader.TokenType)
     {
       case JsonToken.None:
     // read to next
     break;
       case JsonToken.StartObject:
     WriteStartObject();
     break;
       case JsonToken.StartArray:
     WriteStartArray();
     break;
       case JsonToken.StartConstructor:
     string constructorName = reader.Value.ToString();
     // write a JValue date when the constructor is for a date
     if (string.Compare(constructorName, "Date", StringComparison.Ordinal) == 0)
       WriteConstructorDate(reader);
     else
       WriteStartConstructor(reader.Value.ToString());
     break;
       case JsonToken.PropertyName:
     WritePropertyName(reader.Value.ToString());
     break;
       case JsonToken.Comment:
     WriteComment(reader.Value.ToString());
     break;
       case JsonToken.Integer:
     WriteValue((long)reader.Value);
     break;
       case JsonToken.Float:
     WriteValue((double)reader.Value);
     break;
       case JsonToken.String:
     WriteValue(reader.Value.ToString());
     break;
       case JsonToken.Boolean:
     WriteValue((bool)reader.Value);
     break;
       case JsonToken.Null:
     WriteNull();
     break;
       case JsonToken.Undefined:
     WriteUndefined();
     break;
       case JsonToken.EndObject:
     WriteEndObject();
     break;
       case JsonToken.EndArray:
     WriteEndArray();
     break;
       case JsonToken.EndConstructor:
     WriteEndConstructor();
     break;
       case JsonToken.Date:
     WriteValue((DateTime)reader.Value);
     break;
       case JsonToken.Raw:
     WriteRawValue((string)reader.Value);
     break;
       case JsonToken.Bytes:
     WriteValue((byte[])reader.Value);
     break;
       default:
     throw MiscellaneousUtils.CreateArgumentOutOfRangeException("TokenType", reader.TokenType, "Unexpected token type.");
     }
       }
       while (
     // stop if we have reached the end of the token being read
     initialDepth - 1 < reader.Depth - (IsEndToken(reader.TokenType) ? 1 : 0)
     && reader.Read());
 }
예제 #2
0
        /// <summary>
        /// Writes the current <see cref="JsonReader"/> token.
        /// </summary>
        /// <param name="reader">The <see cref="JsonReader"/> to read the token from.</param>
        public void WriteToken(JsonReader reader)
        {
            ValidationUtils.ArgumentNotNull(reader, "reader");

              int initialDepth;

              if (reader.TokenType == JsonToken.None)
            initialDepth = -1;
              else if (!IsStartToken(reader.TokenType))
            initialDepth = reader.Depth + 1;
              else
            initialDepth = reader.Depth;

              WriteToken(reader, initialDepth);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="JsonValidatingReader"/> class that
 /// validates the content returned from the given <see cref="JsonReader"/>.
 /// </summary>
 /// <param name="reader">The <see cref="JsonReader"/> to read from while validating.</param>
 public JsonValidatingReader(JsonReader reader)
 {
     ValidationUtils.ArgumentNotNull(reader, "reader");
       _reader = reader;
       _stack = new Stack<SchemaScope>();
 }
예제 #4
0
        private void WriteConstructorDate(JsonReader reader)
        {
            if (!reader.Read())
            throw new Exception("Unexpected end while reading date constructor.");
              if (reader.TokenType != JsonToken.Integer)
            throw new Exception("Unexpected token while reading date constructor. Expected Integer, got " + reader.TokenType);

              long ticks = (long)reader.Value;
              DateTime date = JsonConvert.ConvertJavaScriptTicksToDateTime(ticks);

              if (!reader.Read())
            throw new Exception("Unexpected end while reading date constructor.");
              if (reader.TokenType != JsonToken.EndConstructor)
            throw new Exception("Unexpected token while reading date constructor. Expected EndConstructor, got " + reader.TokenType);

              WriteValue(date);
        }
예제 #5
0
 /// <summary>
 /// Reads the JSON representation of the object.
 /// </summary>
 /// <param name="reader">The <see cref="JsonReader"/> to read from.</param>
 /// <param name="objectType">Type of the object.</param>
 /// <param name="existingValue">The existing value of object being read.</param>
 /// <param name="serializer">The calling serializer.</param>
 /// <returns>The object value.</returns>
 public abstract object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer);