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(); }
/// <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(); }
public IJsonObjectConsumer Object() { IJsonObjectConsumer obj = mWrappedConsumer.Object(); if (mTypeName != null) { obj.PropertyName(mTypeProperty); obj.String(mTypeName); } return(obj); }
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 }
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(); }
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); } } }