public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType != JsonToken.StartObject) { return(null); } var tracker = new TrackableSetTracker <T>(); reader.Read(); while (true) { if (reader.TokenType != JsonToken.PropertyName) { break; } var str = (string)reader.Value; reader.Read(); var add = (str == "+"); if (reader.TokenType != JsonToken.StartArray) { break; } reader.Read(); while (reader.TokenType != JsonToken.EndArray) { var value = serializer.Deserialize <T>(reader); reader.Read(); if (add) { tracker.TrackAdd(value); } else { tracker.TrackRemove(value); } } reader.Read(); } return(tracker); }
public static TrackableSetTracker <T> Convert(TrackableSetTrackerSurrogate <T> surrogate) { if (surrogate == null) { return(null); } var tracker = new TrackableSetTracker <T>(); foreach (var value in surrogate.AddValues) { tracker.TrackAdd(value); } foreach (var value in surrogate.RemoveValues) { tracker.TrackRemove(value); } return(tracker); }
public static TrackableSetTracker <T> Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options) { var tracker = new TrackableSetTracker <T>(); var length = reader.ReadArrayHeader(); for (int i = 0; i < length; i++) { var isAdd = reader.ReadBoolean(); var value = MessagePackSerializer.Deserialize <T>(ref reader, options); if (isAdd) { tracker.TrackAdd(value); } else { tracker.TrackRemove(value); } } return(tracker); }