@@ -12,19 +12,19 @@ namespace Discord.Serialization.Json.Converters | |||
_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) | |||
reader.Read(); | |||
if (reader.ValueType == JsonValueType.Number) | |||
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) | |||
_innerConverter.Write(map, writer, value.Object, isTopLevel); | |||
_innerConverter.Write(map, ref writer, value.Object, isTopLevel); | |||
else | |||
{ | |||
if (isTopLevel) | |||
@@ -4,9 +4,9 @@ namespace Discord.Serialization.Json.Converters | |||
{ | |||
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(); | |||
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(); | |||
} | |||
} |
@@ -4,7 +4,7 @@ namespace Discord.Serialization.Json.Converters | |||
{ | |||
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) | |||
reader.Read(); | |||
@@ -12,7 +12,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected Number"); | |||
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) | |||
writer.WriteAttribute(map.Key, value); | |||
@@ -11,13 +11,13 @@ namespace Discord.Serialization.Json.Converters | |||
_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) | |||
_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> | |||
{ | |||
public ulong Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||
public ulong Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||
{ | |||
if (isTopLevel) | |||
reader.Read(); | |||
@@ -12,7 +12,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected Number"); | |||
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) | |||
writer.WriteAttribute(map.Key, value); | |||
@@ -12,25 +12,25 @@ namespace Discord.Serialization.Json.Converters | |||
_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) | |||
throw new SerializationException("Bad input, expected StartArray"); | |||
var list = new List<T>(); | |||
while (reader.Read() && reader.TokenType != JsonTokenType.EndArray) | |||
list.Add(_innerConverter.Read(map, reader, false)); | |||
list.Add(_innerConverter.Read(map, ref reader, false)); | |||
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) | |||
writer.WriteArrayStart(map.Key); | |||
else | |||
writer.WriteArrayStart(); | |||
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(); | |||
} | |||
} | |||
@@ -12,19 +12,19 @@ namespace Discord.Serialization.Json.Converters | |||
_innerConverter = innerConverter; | |||
} | |||
public T? Read(PropertyMap map, JsonReader reader, bool isTopLevel) | |||
public T? Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) | |||
{ | |||
if (isTopLevel) | |||
reader.Read(); | |||
if (reader.ValueType == JsonValueType.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) | |||
_innerConverter.Write(map, writer, value.Value, isTopLevel); | |||
_innerConverter.Write(map, ref writer, value.Value, isTopLevel); | |||
else | |||
{ | |||
if (isTopLevel) | |||
@@ -7,7 +7,7 @@ namespace Discord.Serialization.Json.Converters | |||
{ | |||
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(); | |||
@@ -20,25 +20,22 @@ namespace Discord.Serialization.Json.Converters | |||
if (reader.TokenType != JsonTokenType.PropertyName) | |||
throw new SerializationException("Bad input, expected PropertyName"); | |||
string key = reader.ParseString(); | |||
string key = reader.ParseString(); | |||
if (_map.PropertiesByKey.TryGetValue(key, out var property)) | |||
(property as IJsonPropertyMap<T>).Read(model, reader); | |||
(property as IJsonPropertyMap<T>).Read(model, ref reader); | |||
else | |||
reader.Skip(); //Unknown property, skip | |||
if (!reader.Read()) | |||
throw new SerializationException("Bad input, expected Value"); | |||
} | |||
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) | |||
writer.WriteObjectStart(map.Key); | |||
else | |||
writer.WriteObjectStart(); | |||
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(); | |||
} | |||
} |
@@ -5,7 +5,7 @@ namespace Discord.Serialization.Json.Converters | |||
{ | |||
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) | |||
reader.Read(); | |||
@@ -13,7 +13,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value); | |||
@@ -24,7 +24,7 @@ namespace Discord.Serialization.Json.Converters | |||
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) | |||
reader.Read(); | |||
@@ -32,7 +32,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value); | |||
@@ -4,9 +4,9 @@ namespace Discord.Serialization.Json.Converters | |||
{ | |||
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(); | |||
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(); | |||
} | |||
} |
@@ -4,7 +4,7 @@ namespace Discord.Serialization.Json.Converters | |||
{ | |||
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) | |||
reader.Read(); | |||
@@ -12,7 +12,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected Number or String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value.ToString()); | |||
@@ -23,7 +23,7 @@ namespace Discord.Serialization.Json.Converters | |||
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) | |||
reader.Read(); | |||
@@ -31,7 +31,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected Number or String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value.ToString()); | |||
@@ -42,7 +42,7 @@ namespace Discord.Serialization.Json.Converters | |||
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) | |||
reader.Read(); | |||
@@ -50,7 +50,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected Number or String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value.ToString()); | |||
@@ -5,7 +5,7 @@ namespace Discord.Serialization.Json.Converters | |||
{ | |||
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) | |||
reader.Read(); | |||
@@ -16,7 +16,7 @@ namespace Discord.Serialization.Json.Converters | |||
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) | |||
writer.WriteAttribute(map.Key, value); | |||
@@ -27,7 +27,7 @@ namespace Discord.Serialization.Json.Converters | |||
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) | |||
reader.Read(); | |||
@@ -35,7 +35,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value.ToString()); | |||
@@ -4,7 +4,7 @@ namespace Discord.Serialization.Json.Converters | |||
{ | |||
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) | |||
reader.Read(); | |||
@@ -12,7 +12,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected Number or String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value); | |||
@@ -23,7 +23,7 @@ namespace Discord.Serialization.Json.Converters | |||
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) | |||
reader.Read(); | |||
@@ -31,7 +31,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected Number or String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value); | |||
@@ -42,7 +42,7 @@ namespace Discord.Serialization.Json.Converters | |||
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) | |||
reader.Read(); | |||
@@ -50,7 +50,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected Number or String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value); | |||
@@ -61,7 +61,7 @@ namespace Discord.Serialization.Json.Converters | |||
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) | |||
reader.Read(); | |||
@@ -69,7 +69,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected Number or String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value.ToString()); | |||
@@ -23,7 +23,7 @@ namespace Discord.Serialization.Json.Converters | |||
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) | |||
reader.Read(); | |||
@@ -31,7 +31,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value); | |||
@@ -4,7 +4,7 @@ namespace Discord.Serialization.Json.Converters | |||
{ | |||
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) | |||
reader.Read(); | |||
@@ -12,7 +12,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected Number or String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value); | |||
@@ -23,7 +23,7 @@ namespace Discord.Serialization.Json.Converters | |||
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) | |||
reader.Read(); | |||
@@ -31,7 +31,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected Number or String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value); | |||
@@ -42,7 +42,7 @@ namespace Discord.Serialization.Json.Converters | |||
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) | |||
reader.Read(); | |||
@@ -50,7 +50,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected Number or String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value); | |||
@@ -61,7 +61,7 @@ namespace Discord.Serialization.Json.Converters | |||
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) | |||
reader.Read(); | |||
@@ -69,7 +69,7 @@ namespace Discord.Serialization.Json.Converters | |||
throw new SerializationException("Bad input, expected Number or String"); | |||
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) | |||
writer.WriteAttribute(map.Key, value.ToString()); | |||
@@ -4,7 +4,7 @@ namespace Discord.Serialization.Json | |||
{ | |||
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; } | |||
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()) | |||
return null; | |||
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) | |||
{ | |||
var writer = new JsonWriter(stream); | |||
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>; | |||
} | |||
public void Write(TModel model, JsonWriter writer) | |||
public void Write(TModel model, ref JsonWriter writer) | |||
{ | |||
var value = _getFunc(model); | |||
if (value == null && ExcludeNull) | |||
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); | |||
} | |||
} | |||