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);
        }
Example #2
0
 public PassiveNodeGroupViewModel(ushort id, JsonPassiveNodeGroup jsonPassiveNodeGroup)
 {
     Id = id;
     JsonPassiveNodeGroup = jsonPassiveNodeGroup;
 }