| @@ -12,19 +12,19 @@ namespace Discord.Serialization.Json.Converters | |||||
| _innerConverter = innerConverter; | _innerConverter = innerConverter; | ||||
| } | } | ||||
| public EntityOrId<T> Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public EntityOrId<T> Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| if (reader.ValueType == JsonValueType.Number) | if (reader.ValueType == JsonValueType.Number) | ||||
| return new EntityOrId<T>(reader.ParseUInt64()); | return new EntityOrId<T>(reader.ParseUInt64()); | ||||
| return new EntityOrId<T>(_innerConverter.Read(map, reader, false)); | |||||
| return new EntityOrId<T>(_innerConverter.Read(map, ref reader, false)); | |||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, EntityOrId<T> value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, EntityOrId<T> value, bool isTopLevel) | |||||
| { | { | ||||
| if (value.Object != null) | if (value.Object != null) | ||||
| _innerConverter.Write(map, writer, value.Object, isTopLevel); | |||||
| _innerConverter.Write(map, ref writer, value.Object, isTopLevel); | |||||
| else | else | ||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| @@ -4,9 +4,9 @@ namespace Discord.Serialization.Json.Converters | |||||
| { | { | ||||
| internal class ImagePropertyConverter : IJsonPropertyConverter<API.Image> | internal class ImagePropertyConverter : IJsonPropertyConverter<API.Image> | ||||
| { | { | ||||
| public API.Image Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public API.Image Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| => throw new System.NotImplementedException(); | => throw new System.NotImplementedException(); | ||||
| public void Write(PropertyMap map, JsonWriter writer, API.Image value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, API.Image value, bool isTopLevel) | |||||
| => throw new System.NotImplementedException(); | => throw new System.NotImplementedException(); | ||||
| } | } | ||||
| } | } | ||||
| @@ -4,7 +4,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| { | { | ||||
| internal class Int53PropertyConverter : IJsonPropertyConverter<long> | internal class Int53PropertyConverter : IJsonPropertyConverter<long> | ||||
| { | { | ||||
| public long Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public long Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -12,7 +12,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected Number"); | throw new SerializationException("Bad input, expected Number"); | ||||
| return reader.ParseInt64(); | return reader.ParseInt64(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, long value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, long value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value); | writer.WriteAttribute(map.Key, value); | ||||
| @@ -11,13 +11,13 @@ namespace Discord.Serialization.Json.Converters | |||||
| _innerConverter = innerConverter; | _innerConverter = innerConverter; | ||||
| } | } | ||||
| public Optional<T> Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| => new Optional<T>(_innerConverter.Read(map, reader, isTopLevel)); | |||||
| public Optional<T> Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| => new Optional<T>(_innerConverter.Read(map, ref reader, isTopLevel)); | |||||
| public void Write(PropertyMap map, JsonWriter writer, Optional<T> value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, Optional<T> value, bool isTopLevel) | |||||
| { | { | ||||
| if (value.IsSpecified) | if (value.IsSpecified) | ||||
| _innerConverter.Write(map, writer, value.Value, isTopLevel); | |||||
| _innerConverter.Write(map, ref writer, value.Value, isTopLevel); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -4,7 +4,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| { | { | ||||
| internal class UInt53PropertyConverter : IJsonPropertyConverter<ulong> | internal class UInt53PropertyConverter : IJsonPropertyConverter<ulong> | ||||
| { | { | ||||
| public ulong Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public ulong Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -12,7 +12,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected Number"); | throw new SerializationException("Bad input, expected Number"); | ||||
| return reader.ParseUInt64(); | return reader.ParseUInt64(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, ulong value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, ulong value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value); | writer.WriteAttribute(map.Key, value); | ||||
| @@ -12,25 +12,25 @@ namespace Discord.Serialization.Json.Converters | |||||
| _innerConverter = innerConverter; | _innerConverter = innerConverter; | ||||
| } | } | ||||
| public List<T> Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public List<T> Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if ((isTopLevel && !reader.Read()) || reader.TokenType != JsonTokenType.StartArray) | if ((isTopLevel && !reader.Read()) || reader.TokenType != JsonTokenType.StartArray) | ||||
| throw new SerializationException("Bad input, expected StartArray"); | throw new SerializationException("Bad input, expected StartArray"); | ||||
| var list = new List<T>(); | var list = new List<T>(); | ||||
| while (reader.Read() && reader.TokenType != JsonTokenType.EndArray) | while (reader.Read() && reader.TokenType != JsonTokenType.EndArray) | ||||
| list.Add(_innerConverter.Read(map, reader, false)); | |||||
| list.Add(_innerConverter.Read(map, ref reader, false)); | |||||
| return list; | return list; | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, List<T> value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, List<T> value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteArrayStart(map.Key); | writer.WriteArrayStart(map.Key); | ||||
| else | else | ||||
| writer.WriteArrayStart(); | writer.WriteArrayStart(); | ||||
| for (int i = 0; i < value.Count; i++) | for (int i = 0; i < value.Count; i++) | ||||
| _innerConverter.Write(map, writer, value[i], false); | |||||
| _innerConverter.Write(map, ref writer, value[i], false); | |||||
| writer.WriteArrayEnd(); | writer.WriteArrayEnd(); | ||||
| } | } | ||||
| } | } | ||||
| @@ -12,19 +12,19 @@ namespace Discord.Serialization.Json.Converters | |||||
| _innerConverter = innerConverter; | _innerConverter = innerConverter; | ||||
| } | } | ||||
| public T? Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public T? Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| if (reader.ValueType == JsonValueType.Null) | if (reader.ValueType == JsonValueType.Null) | ||||
| return null; | return null; | ||||
| return _innerConverter.Read(map, reader, false); | |||||
| return _innerConverter.Read(map, ref reader, false); | |||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, T? value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, T? value, bool isTopLevel) | |||||
| { | { | ||||
| if (value.HasValue) | if (value.HasValue) | ||||
| _innerConverter.Write(map, writer, value.Value, isTopLevel); | |||||
| _innerConverter.Write(map, ref writer, value.Value, isTopLevel); | |||||
| else | else | ||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| @@ -7,7 +7,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| { | { | ||||
| private static readonly ModelMap<T> _map = SerializationFormat.Json.MapModel<T>(); | private static readonly ModelMap<T> _map = SerializationFormat.Json.MapModel<T>(); | ||||
| public T Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public T Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| var model = new T(); | var model = new T(); | ||||
| @@ -20,25 +20,22 @@ namespace Discord.Serialization.Json.Converters | |||||
| if (reader.TokenType != JsonTokenType.PropertyName) | if (reader.TokenType != JsonTokenType.PropertyName) | ||||
| throw new SerializationException("Bad input, expected PropertyName"); | throw new SerializationException("Bad input, expected PropertyName"); | ||||
| string key = reader.ParseString(); | |||||
| string key = reader.ParseString(); | |||||
| if (_map.PropertiesByKey.TryGetValue(key, out var property)) | if (_map.PropertiesByKey.TryGetValue(key, out var property)) | ||||
| (property as IJsonPropertyMap<T>).Read(model, reader); | |||||
| (property as IJsonPropertyMap<T>).Read(model, ref reader); | |||||
| else | else | ||||
| reader.Skip(); //Unknown property, skip | reader.Skip(); //Unknown property, skip | ||||
| if (!reader.Read()) | |||||
| throw new SerializationException("Bad input, expected Value"); | |||||
| } | } | ||||
| throw new SerializationException("Bad input, expected EndObject"); | throw new SerializationException("Bad input, expected EndObject"); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, T value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, T value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteObjectStart(map.Key); | writer.WriteObjectStart(map.Key); | ||||
| else | else | ||||
| writer.WriteObjectStart(); | writer.WriteObjectStart(); | ||||
| for (int i = 0; i < _map.Properties.Length; i++) | for (int i = 0; i < _map.Properties.Length; i++) | ||||
| (_map.Properties[i] as IJsonPropertyMap<T>).Write(value, writer); | |||||
| (_map.Properties[i] as IJsonPropertyMap<T>).Write(value, ref writer); | |||||
| writer.WriteObjectEnd(); | writer.WriteObjectEnd(); | ||||
| } | } | ||||
| } | } | ||||
| @@ -5,7 +5,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| { | { | ||||
| internal class DateTimePropertyConverter : IJsonPropertyConverter<DateTime> | internal class DateTimePropertyConverter : IJsonPropertyConverter<DateTime> | ||||
| { | { | ||||
| public DateTime Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public DateTime Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -13,7 +13,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected String"); | throw new SerializationException("Bad input, expected String"); | ||||
| return reader.ParseDateTime(); | return reader.ParseDateTime(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, DateTime value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, DateTime value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value); | writer.WriteAttribute(map.Key, value); | ||||
| @@ -24,7 +24,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| internal class DateTimeOffsetPropertyConverter : IJsonPropertyConverter<DateTimeOffset> | internal class DateTimeOffsetPropertyConverter : IJsonPropertyConverter<DateTimeOffset> | ||||
| { | { | ||||
| public DateTimeOffset Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public DateTimeOffset Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -32,7 +32,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected String"); | throw new SerializationException("Bad input, expected String"); | ||||
| return reader.ParseDateTimeOffset(); | return reader.ParseDateTimeOffset(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, DateTimeOffset value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, DateTimeOffset value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value); | writer.WriteAttribute(map.Key, value); | ||||
| @@ -4,9 +4,9 @@ namespace Discord.Serialization.Json.Converters | |||||
| { | { | ||||
| internal class EnumPropertyConverter<T> : IJsonPropertyConverter<T> | internal class EnumPropertyConverter<T> : IJsonPropertyConverter<T> | ||||
| { | { | ||||
| public T Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public T Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| => throw new System.NotImplementedException(); | => throw new System.NotImplementedException(); | ||||
| public void Write(PropertyMap map, JsonWriter writer, T value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, T value, bool isTopLevel) | |||||
| => throw new System.NotImplementedException(); | => throw new System.NotImplementedException(); | ||||
| } | } | ||||
| } | } | ||||
| @@ -4,7 +4,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| { | { | ||||
| internal class SinglePropertyConverter : IJsonPropertyConverter<float> | internal class SinglePropertyConverter : IJsonPropertyConverter<float> | ||||
| { | { | ||||
| public float Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public float Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -12,7 +12,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected Number or String"); | throw new SerializationException("Bad input, expected Number or String"); | ||||
| return reader.ParseSingle(); | return reader.ParseSingle(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, float value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, float value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value.ToString()); | writer.WriteAttribute(map.Key, value.ToString()); | ||||
| @@ -23,7 +23,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| internal class DoublePropertyConverter : IJsonPropertyConverter<double> | internal class DoublePropertyConverter : IJsonPropertyConverter<double> | ||||
| { | { | ||||
| public double Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public double Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -31,7 +31,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected Number or String"); | throw new SerializationException("Bad input, expected Number or String"); | ||||
| return reader.ParseDouble(); | return reader.ParseDouble(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, double value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, double value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value.ToString()); | writer.WriteAttribute(map.Key, value.ToString()); | ||||
| @@ -42,7 +42,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| internal class DecimalPropertyConverter : IJsonPropertyConverter<decimal> | internal class DecimalPropertyConverter : IJsonPropertyConverter<decimal> | ||||
| { | { | ||||
| public decimal Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public decimal Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -50,7 +50,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected Number or String"); | throw new SerializationException("Bad input, expected Number or String"); | ||||
| return reader.ParseDecimal(); | return reader.ParseDecimal(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, decimal value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, decimal value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value.ToString()); | writer.WriteAttribute(map.Key, value.ToString()); | ||||
| @@ -5,7 +5,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| { | { | ||||
| internal class BooleanPropertyConverter : IJsonPropertyConverter<bool> | internal class BooleanPropertyConverter : IJsonPropertyConverter<bool> | ||||
| { | { | ||||
| public bool Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public bool Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -16,7 +16,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| default: throw new SerializationException("Bad input, expected False or True"); | default: throw new SerializationException("Bad input, expected False or True"); | ||||
| } | } | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, bool value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, bool value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value); | writer.WriteAttribute(map.Key, value); | ||||
| @@ -27,7 +27,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| internal class GuidPropertyConverter : IJsonPropertyConverter<Guid> | internal class GuidPropertyConverter : IJsonPropertyConverter<Guid> | ||||
| { | { | ||||
| public Guid Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public Guid Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -35,7 +35,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected String"); | throw new SerializationException("Bad input, expected String"); | ||||
| return Guid.Parse(reader.ParseString()); | return Guid.Parse(reader.ParseString()); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, Guid value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, Guid value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value.ToString()); | writer.WriteAttribute(map.Key, value.ToString()); | ||||
| @@ -4,7 +4,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| { | { | ||||
| internal class Int8PropertyConverter : IJsonPropertyConverter<sbyte> | internal class Int8PropertyConverter : IJsonPropertyConverter<sbyte> | ||||
| { | { | ||||
| public sbyte Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public sbyte Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -12,7 +12,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected Number or String"); | throw new SerializationException("Bad input, expected Number or String"); | ||||
| return reader.ParseInt8(); | return reader.ParseInt8(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, sbyte value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, sbyte value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value); | writer.WriteAttribute(map.Key, value); | ||||
| @@ -23,7 +23,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| internal class Int16PropertyConverter : IJsonPropertyConverter<short> | internal class Int16PropertyConverter : IJsonPropertyConverter<short> | ||||
| { | { | ||||
| public short Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public short Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -31,7 +31,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected Number or String"); | throw new SerializationException("Bad input, expected Number or String"); | ||||
| return reader.ParseInt16(); | return reader.ParseInt16(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, short value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, short value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value); | writer.WriteAttribute(map.Key, value); | ||||
| @@ -42,7 +42,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| internal class Int32PropertyConverter : IJsonPropertyConverter<int> | internal class Int32PropertyConverter : IJsonPropertyConverter<int> | ||||
| { | { | ||||
| public int Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public int Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -50,7 +50,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected Number or String"); | throw new SerializationException("Bad input, expected Number or String"); | ||||
| return reader.ParseInt32(); | return reader.ParseInt32(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, int value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, int value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value); | writer.WriteAttribute(map.Key, value); | ||||
| @@ -61,7 +61,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| internal class Int64PropertyConverter : IJsonPropertyConverter<long> | internal class Int64PropertyConverter : IJsonPropertyConverter<long> | ||||
| { | { | ||||
| public long Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public long Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -69,7 +69,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected Number or String"); | throw new SerializationException("Bad input, expected Number or String"); | ||||
| return reader.ParseInt64(); | return reader.ParseInt64(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, long value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, long value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value.ToString()); | writer.WriteAttribute(map.Key, value.ToString()); | ||||
| @@ -23,7 +23,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| internal class StringPropertyConverter : IJsonPropertyConverter<string> | internal class StringPropertyConverter : IJsonPropertyConverter<string> | ||||
| { | { | ||||
| public string Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public string Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -31,7 +31,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected String"); | throw new SerializationException("Bad input, expected String"); | ||||
| return reader.ParseString(); | return reader.ParseString(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, string value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, string value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value); | writer.WriteAttribute(map.Key, value); | ||||
| @@ -4,7 +4,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| { | { | ||||
| internal class UInt8PropertyConverter : IJsonPropertyConverter<byte> | internal class UInt8PropertyConverter : IJsonPropertyConverter<byte> | ||||
| { | { | ||||
| public byte Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public byte Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -12,7 +12,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected Number or String"); | throw new SerializationException("Bad input, expected Number or String"); | ||||
| return reader.ParseUInt8(); | return reader.ParseUInt8(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, byte value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, byte value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value); | writer.WriteAttribute(map.Key, value); | ||||
| @@ -23,7 +23,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| internal class UInt16PropertyConverter : IJsonPropertyConverter<ushort> | internal class UInt16PropertyConverter : IJsonPropertyConverter<ushort> | ||||
| { | { | ||||
| public ushort Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public ushort Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -31,7 +31,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected Number or String"); | throw new SerializationException("Bad input, expected Number or String"); | ||||
| return reader.ParseUInt16(); | return reader.ParseUInt16(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, ushort value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, ushort value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value); | writer.WriteAttribute(map.Key, value); | ||||
| @@ -42,7 +42,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| internal class UInt32PropertyConverter : IJsonPropertyConverter<uint> | internal class UInt32PropertyConverter : IJsonPropertyConverter<uint> | ||||
| { | { | ||||
| public uint Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public uint Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -50,7 +50,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected Number or String"); | throw new SerializationException("Bad input, expected Number or String"); | ||||
| return reader.ParseUInt32(); | return reader.ParseUInt32(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, uint value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, uint value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value); | writer.WriteAttribute(map.Key, value); | ||||
| @@ -61,7 +61,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| internal class UInt64PropertyConverter : IJsonPropertyConverter<ulong> | internal class UInt64PropertyConverter : IJsonPropertyConverter<ulong> | ||||
| { | { | ||||
| public ulong Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||||
| public ulong Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| reader.Read(); | reader.Read(); | ||||
| @@ -69,7 +69,7 @@ namespace Discord.Serialization.Json.Converters | |||||
| throw new SerializationException("Bad input, expected Number or String"); | throw new SerializationException("Bad input, expected Number or String"); | ||||
| return reader.ParseUInt64(); | return reader.ParseUInt64(); | ||||
| } | } | ||||
| public void Write(PropertyMap map, JsonWriter writer, ulong value, bool isTopLevel) | |||||
| public void Write(PropertyMap map, ref JsonWriter writer, ulong value, bool isTopLevel) | |||||
| { | { | ||||
| if (isTopLevel) | if (isTopLevel) | ||||
| writer.WriteAttribute(map.Key, value.ToString()); | writer.WriteAttribute(map.Key, value.ToString()); | ||||
| @@ -4,7 +4,7 @@ namespace Discord.Serialization.Json | |||||
| { | { | ||||
| public interface IJsonPropertyConverter<T> | public interface IJsonPropertyConverter<T> | ||||
| { | { | ||||
| T Read(PropertyMap map, JsonReader reader, bool isTopLevel); | |||||
| void Write(PropertyMap map, JsonWriter writer, T value, bool isTopLevel); | |||||
| T Read(PropertyMap map, ref JsonReader reader, bool isTopLevel); | |||||
| void Write(PropertyMap map, ref JsonWriter writer, T value, bool isTopLevel); | |||||
| } | } | ||||
| } | } | ||||
| @@ -6,7 +6,7 @@ namespace Discord.Serialization | |||||
| { | { | ||||
| string Key { get; } | string Key { get; } | ||||
| void Write(TModel model, JsonWriter writer); | |||||
| void Read(TModel model, JsonReader reader); | |||||
| void Write(TModel model, ref JsonWriter writer); | |||||
| void Read(TModel model, ref JsonReader reader); | |||||
| } | } | ||||
| } | } | ||||
| @@ -70,14 +70,14 @@ namespace Discord.Serialization.Json | |||||
| if (!reader.Read()) | if (!reader.Read()) | ||||
| return null; | return null; | ||||
| var converter = _converters.Get<TModel>() as IJsonPropertyConverter<TModel>; | var converter = _converters.Get<TModel>() as IJsonPropertyConverter<TModel>; | ||||
| return converter.Read(null, reader, false); | |||||
| return converter.Read(null, ref reader, false); | |||||
| } | } | ||||
| protected internal override void Write<TModel>(Serializer serializer, ArrayFormatter stream, TModel model) | protected internal override void Write<TModel>(Serializer serializer, ArrayFormatter stream, TModel model) | ||||
| { | { | ||||
| var writer = new JsonWriter(stream); | var writer = new JsonWriter(stream); | ||||
| var converter = _converters.Get<TModel>() as IJsonPropertyConverter<TModel>; | var converter = _converters.Get<TModel>() as IJsonPropertyConverter<TModel>; | ||||
| converter.Write(null, writer, model, false); | |||||
| converter.Write(null, ref writer, model, false); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -19,16 +19,16 @@ namespace Discord.Serialization.Json | |||||
| _setFunc = propInfo.SetMethod.CreateDelegate(typeof(Action<TModel, TType>)) as Action<TModel, TType>; | _setFunc = propInfo.SetMethod.CreateDelegate(typeof(Action<TModel, TType>)) as Action<TModel, TType>; | ||||
| } | } | ||||
| public void Write(TModel model, JsonWriter writer) | |||||
| public void Write(TModel model, ref JsonWriter writer) | |||||
| { | { | ||||
| var value = _getFunc(model); | var value = _getFunc(model); | ||||
| if (value == null && ExcludeNull) | if (value == null && ExcludeNull) | ||||
| return; | return; | ||||
| _converter.Write(this, writer, value, true); | |||||
| _converter.Write(this, ref writer, value, true); | |||||
| } | } | ||||
| public void Read(TModel model, JsonReader reader) | |||||
| public void Read(TModel model, ref JsonReader reader) | |||||
| { | { | ||||
| var value = _converter.Read(this, reader, true); | |||||
| var value = _converter.Read(this, ref reader, true); | |||||
| _setFunc(model, value); | _setFunc(model, value); | ||||
| } | } | ||||
| } | } | ||||