public override object ReadJson(JsonReader reader, Type objectType, object?existingValue, JsonSerializer serializer) { var jObject = JObject.Load(reader); var passiveNodeGroup = new JsonPassiveNodeGroup(); if (jObject.GetValue("oo") is JToken oo && oo.Type == JTokenType.Object) { ParseOccupiedOrbitsToken(oo); jObject.Remove("oo"); } if (jObject.GetValue("oo") is JToken ooArray && ooArray.Type == JTokenType.Array) { var array = ooArray.ToObject <List <ushort> >() ?? new List <ushort>(); if (array.Count == 1) { passiveNodeGroup.OccupiedOrbits.Add(0); } else { passiveNodeGroup.OccupiedOrbits.AddRange(from item in array select item); } jObject.Remove("oo"); } if (jObject.GetValue("orbits") is JToken orbits && orbits.Type == JTokenType.Object) { ParseOccupiedOrbitsToken(orbits); jObject.Remove("orbits"); } void ParseOccupiedOrbitsToken(JToken token) { passiveNodeGroup.OccupiedOrbits.Clear(); passiveNodeGroup.OccupiedOrbits.AddRange(from item in token.ToObject <Dictionary <ushort, bool> >() ?? new Dictionary <ushort, bool>() select item.Key); } serializer.Populate(jObject.CreateReader(), passiveNodeGroup); return(passiveNodeGroup); }
public PassiveNodeGroupViewModel(ushort id, JsonPassiveNodeGroup jsonPassiveNodeGroup) { Id = id; JsonPassiveNodeGroup = jsonPassiveNodeGroup; }