public object SanitiseSnapshot(object snapshot) { try { if (snapshot is string stringSnapshot) { if (StringIsJsonObject(stringSnapshot)) { try { return(JObjectHelper.ParseFromString(stringSnapshot)); } catch (Exception e) { throw new MalformedJsonSnapshotException(e); } } } JObjectHelper.FromObject(snapshot); return(snapshot); } catch (ArgumentException) { return(new { AutoGenerated = snapshot }); } }
public object GetSnapshot(SnapshotId snapshotId) { if (!File.Exists(snapshotId.FilePath)) { return(null); } var fullSnapshot = JObjectHelper.ParseFromString(File.ReadAllText(snapshotId.FilePath)); if (snapshotId.PrimaryId == null && snapshotId.SecondaryId == null) { return(fullSnapshot); } if (snapshotId.PrimaryId != null && fullSnapshot.TryGetValue(snapshotId.PrimaryId, out var partialSnapshot)) { if (snapshotId.SecondaryId != null && partialSnapshot is JObject partialSnapshotJObject && partialSnapshotJObject.TryGetValue(snapshotId.SecondaryId, out partialSnapshot)) { return(partialSnapshot); } return(partialSnapshot); } return(null); }
public bool CompareSnapshots(object oldSnap, object newSnap) { var old = JObjectHelper.FromObject(oldSnap); var @new = JObjectHelper.FromObject(newSnap); @new = JObjectHelper.ParseFromString(@new.ToString()); return(JToken.DeepEquals(old, @new)); }