public object ReadJson(ref JReader reader) { string key = null; int version = 0; bool deleted = false; ImmutableList <string> included = null, excluded = null; ImmutableList <SegmentRule> rules = null; string salt = null; for (var obj = reader.Object().WithRequiredProperties(_requiredProperties); obj.Next(ref reader);) { switch (obj.Name) { case var n when n == "key": key = reader.String(); break; case var n when n == "version": version = reader.Int(); break; case var n when n == "deleted": deleted = reader.Bool(); break; case var n when n == "included": included = SerializationHelpers.ReadStrings(ref reader); break; case var n when n == "excluded": excluded = SerializationHelpers.ReadStrings(ref reader); break; case var n when n == "rules": var rulesBuilder = ImmutableList.CreateBuilder <SegmentRule>(); for (var rulesArr = reader.Array(); rulesArr.Next(ref reader);) { rulesBuilder.Add(ReadSegmentRule(ref reader)); } rules = rulesBuilder.ToImmutable(); break; case var n when n == "salt": salt = reader.StringOrNull(); break; } } if (key is null && !deleted) { throw new RequiredPropertyException("key", 0); } return(new Segment(key, version, deleted, included, excluded, rules, salt)); }
internal static Target ReadTarget(ref JReader r) { ImmutableList <string> values = null; int variation = 0; for (var obj = r.Object(); obj.Next(ref r);) { switch (obj.Name) { case var n when n == "values": values = SerializationHelpers.ReadStrings(ref r); break; case var n when n == "variation": variation = r.Int(); break; } } return(new Target(values, variation)); }