예제 #1
0
        public override void Write(object value, IJsonConsumer writer)
        {
            if (value == null)
            {
                writer.Null();
                return;
            }

            var objConsumer = writer.Object();

            foreach (var property in mPropList)
            {
                object propValue = property.Getter(value);
                if (propValue == null)
                {
                    if (!property.EmitNullValue)
                    {
                        continue;
                    }
                }
                else if (property.SuppressDefaultValue && Equals(propValue, property.DefaultValue))
                {
                    continue;
                }

                objConsumer.PropertyName(property.Name);
                property.Converter.Write(propValue, objConsumer);
            }

            objConsumer.Done();
        }
예제 #2
0
        /// <summary>
        /// Writes this <see cref="JsonObject"/> to a <see cref="IJsonConsumer"/>.
        /// This is also used internally by <see cref="JsonValue.ToModel(System.Type)"/> and
        /// <see cref="JsonValue.ToModel{T}"/> in order to convert this generic object
        /// model to a JSON string or another .NET object.
        /// </summary>
        /// <param name="consumer">The consumer.</param>
        public override void Write(IJsonConsumer consumer)
        {
            IJsonObjectConsumer obj = consumer.Object();

            foreach (KeyValuePair <string, JsonValue> property in mPropertiesOrdered)
            {
                obj.PropertyName(property.Key);
                property.Value.Write(obj);
            }
            obj.Done();
        }
예제 #3
0
            public IJsonObjectConsumer Object()
            {
                IJsonObjectConsumer obj = mWrappedConsumer.Object();

                if (mTypeName != null)
                {
                    obj.PropertyName(mTypeProperty);
                    obj.String(mTypeName);
                }
                return(obj);
            }
예제 #4
0
            public static void ParseValue(Tokenizer tokenizer, IJsonConsumer consumer)
            {
                if (tokenizer.CurrentToken.Type == Tokenizer.Token.None)
                {
                    throw new ParserException($"Unexpected end of stream reached in line {tokenizer.CurrentToken.LineNo} at position {tokenizer.CurrentToken.Position}.", tokenizer.CurrentToken.LineNo, tokenizer.CurrentToken.Position);
                }

                if (tokenizer.CurrentToken.Type == Tokenizer.Token.CurlyOpen)
                {
                    ParseObject(tokenizer, consumer.Object());
                    return;
                }
                if (tokenizer.CurrentToken.Type == Tokenizer.Token.SquaredOpen)
                {
                    ParseArray(tokenizer, consumer.Array());
                    return;
                }

                if (tokenizer.CurrentToken.Type == Tokenizer.Token.String)
                {
                    consumer.String(tokenizer.CurrentToken.StringValue);
                }
                else if (tokenizer.CurrentToken.Type == Tokenizer.Token.Boolean)
                {
                    consumer.Boolean(tokenizer.CurrentToken.BooleanValue);
                }
                else if (tokenizer.CurrentToken.Type == Tokenizer.Token.NumberInteger)
                {
                    consumer.Number(tokenizer.CurrentToken.IntegerValue);
                }
                else if (tokenizer.CurrentToken.Type == Tokenizer.Token.NumberUnsignedInteger)
                {
                    consumer.Number(tokenizer.CurrentToken.UnsignedIntegerValue);
                }
                else if (tokenizer.CurrentToken.Type == Tokenizer.Token.NumberFloat)
                {
                    consumer.Number(tokenizer.CurrentToken.FloatValue);
                }
                else if (tokenizer.CurrentToken.Type == Tokenizer.Token.Null)
                {
                    consumer.Null();
                }
                else
                {
                    throw new ParserException($"Expected value in line {tokenizer.CurrentToken.LineNo} at position {tokenizer.CurrentToken.Position}, but found '{tokenizer.CurrentToken}'.", tokenizer.CurrentToken.LineNo, tokenizer.CurrentToken.Position);
                }

                tokenizer.MoveNext(); // skip value literal
            }
예제 #5
0
        public override void Write(object value, IJsonConsumer writer)
        {
            if (value == null)
            {
                writer.Null();
                return;
            }

            IJsonObjectConsumer objectConsumer = writer.Object();

            foreach (KeyValuePair <string, T> kvp in (Dictionary <string, T>)value)
            {
                objectConsumer.PropertyName(kvp.Key);
                ElementConverter.Write(kvp.Value, objectConsumer);
            }
            objectConsumer.Done();
        }
예제 #6
0
 public override void Write(object value, IJsonConsumer writer)
 {
     if (value == null)
     {
         writer.Null();
     }
     else
     {
         Type type = value.GetType();
         if (type == typeof(object)) // prevent recursion
         {
             writer.Object().Done();
         }
         else
         {
             IConverter converter = ConverterRegistry.Get(type);
             converter.Write(value, writer);
         }
     }
 }