Пример #1
0
        public static IEnumerable <IReadOnlyCollection <DiffRecord> > Diff(IList <JToken> from, IList <JToken> to)
        {
            var length = from.Count > to.Count ? from.Count : to.Count;

            for (var i = 0; i < length; i++)
            {
                var fromToken     = i < from.Count ? from[i] : _emptyToken;
                var toToken       = i < to.Count ? to[i] : _emptyToken;
                var patch         = new JsonDiffer();
                var forwardPatch  = patch.Diff(fromToken, toToken, true);
                var backwardPatch = patch.Diff(toToken, fromToken, true);

                if (TryParseJson(forwardPatch.ToString(), out var forwardTokens) && TryParseJson(backwardPatch.ToString(), out var backwardTokens))
                {
                    var operations = new DiffRecord[forwardTokens.Count];
                    for (var j = 0; j < operations.Length; j++)
                    {
                        var forwardToken     = forwardTokens[j];
                        var forwardOperation = JsonConvert.DeserializeObject <PatchOperation>(forwardToken.ToString());

                        var backwardToken     = backwardTokens[j];
                        var backwardOperation = JsonConvert.DeserializeObject <PatchOperation>(backwardToken.ToString());
                        operations[j] = new DiffRecord
                        {
                            Op        = forwardOperation.Op,
                            Path      = forwardOperation.Path,
                            SideValue = forwardOperation.Value,
                            BaseValue = backwardOperation.Value
                        };
                    }
                    yield return(operations);
                }
                else
                {
                    throw new InvalidOperationException();
                }
            }
        }
Пример #2
0
 private PatchDocument DiffInternal(JToken from, JToken to, bool useIdPropertyToDetermineEquality)
 {
     return(_differ.Diff(from, to, useIdPropertyToDetermineEquality));
 }