예제 #1
0
        public static JToken PatchTokenCopy(
            JToken initial,
            IReadOnlyList <JsonPatchOperation> patchOperations,
            JsonSerializer serializer = null,
            ErrorHandlingTypes globalErrorHandling = ErrorHandlingTypes.Throw)
        {
            serializer = serializer ?? JsonSerializer.CreateDefault();

            var copy = initial.DeepClone();

            patchOperations = patchOperations ?? new JsonPatchOperation[0];

            foreach (var jsonPatchOperation in patchOperations)
            {
                var result = jsonPatchOperation.Apply(ref copy, serializer);
                if (result.IsFailure)
                {
                    var errorHandlingType =
                        ((IErrorHandlingTypeProvider)jsonPatchOperation).ErrorHandlingType
                        ?? globalErrorHandling;
                    if (errorHandlingType == ErrorHandlingTypes.Throw)
                    {
                        throw new JsonPatchException(result.Error);
                    }
                }
            }

            return(copy);
        }
예제 #2
0
 public static T PatchObjectCopy <T>(
     T obj,
     IReadOnlyList <JsonPatchOperation> patchOperations,
     JsonSerializerSettings serializerSettings,
     ErrorHandlingTypes globalErrorHandling = ErrorHandlingTypes.Throw)
 {
     return(PatchObjectCopy(
                obj,
                patchOperations,
                JsonSerializer.Create(serializerSettings),
                globalErrorHandling
                ));
 }
예제 #3
0
 public static JToken PatchTokenCopy(
     JToken initial,
     IReadOnlyList <JsonPatchOperation> patchOperations,
     JsonSerializerSettings serializerSettings,
     ErrorHandlingTypes globalErrorHandling = ErrorHandlingTypes.Throw)
 {
     return(PatchTokenCopy(
                initial,
                patchOperations,
                JsonSerializer.Create(serializerSettings),
                globalErrorHandling
                ));
 }
예제 #4
0
        public static T PatchObjectCopy <T>(
            T obj,
            IReadOnlyList <JsonPatchOperation> patchOperations,
            JsonSerializer serializer = null,
            ErrorHandlingTypes globalErrorHandling = ErrorHandlingTypes.Throw)
        {
            serializer = serializer ?? JsonSerializer.CreateDefault();

            var token = JToken.FromObject(obj, serializer);

            var patchedCopy = PatchTokenCopy(token, patchOperations, serializer, globalErrorHandling);

            return(patchedCopy.ToObject <T>(serializer));
        }