<PackageReference Include="Azure.Core" Version="1.47.3" />

JsonPatchDocument

public class JsonPatchDocument
Represents a JSON Patch document.
using Azure.Core.JsonPatch; using Azure.Core.Serialization; using System; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Runtime.CompilerServices; using System.Text; using System.Text.Json; using System.Threading; namespace Azure { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public class JsonPatchDocument { [System.Runtime.CompilerServices.Nullable(0)] private readonly ReadOnlyMemory<byte> _rawDocument; private readonly ObjectSerializer _serializer; private readonly Collection<JsonPatchOperation> _operations; [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JsonObjectSerializer uses reflection-based JSON serialization and deserialization that is not compatible with trimming.")] [System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JsonObjectSerializer uses reflection-based JSON serialization and deserialization that is not compatible with trimming.")] public JsonPatchDocument() : this(default(ReadOnlyMemory<byte>)) { } public JsonPatchDocument(ObjectSerializer serializer) : this(default(ReadOnlyMemory<byte>), serializer) { } [System.Runtime.CompilerServices.NullableContext(0)] [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JsonObjectSerializer uses reflection-based JSON serialization and deserialization that is not compatible with trimming.")] [System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JsonObjectSerializer uses reflection-based JSON serialization and deserialization that is not compatible with trimming.")] public JsonPatchDocument(ReadOnlyMemory<byte> rawDocument) : this(rawDocument, new JsonObjectSerializer()) { } [System.Runtime.CompilerServices.NullableContext(0)] public JsonPatchDocument(ReadOnlyMemory<byte> rawDocument, [System.Runtime.CompilerServices.Nullable(1)] ObjectSerializer serializer) { _operations = new Collection<JsonPatchOperation>(); _rawDocument = rawDocument; if (serializer == null) throw new ArgumentNullException("serializer"); _serializer = serializer; } public void AppendAddRaw(string path, string rawJsonValue) { _operations.Add(new JsonPatchOperation(JsonPatchOperationKind.Add, path, null, rawJsonValue)); } public void AppendAdd<[System.Runtime.CompilerServices.Nullable(2)] T>(string path, T value) { _operations.Add(new JsonPatchOperation(JsonPatchOperationKind.Add, path, null, Serialize(value))); } public void AppendReplaceRaw(string path, string rawJsonValue) { _operations.Add(new JsonPatchOperation(JsonPatchOperationKind.Replace, path, null, rawJsonValue)); } public void AppendReplace<[System.Runtime.CompilerServices.Nullable(2)] T>(string path, T value) { _operations.Add(new JsonPatchOperation(JsonPatchOperationKind.Replace, path, null, Serialize(value))); } public void AppendCopy(string from, string path) { _operations.Add(new JsonPatchOperation(JsonPatchOperationKind.Copy, path, from, null)); } public void AppendMove(string from, string path) { _operations.Add(new JsonPatchOperation(JsonPatchOperationKind.Move, path, from, null)); } public void AppendRemove(string path) { _operations.Add(new JsonPatchOperation(JsonPatchOperationKind.Remove, path, null, null)); } public void AppendTestRaw(string path, string rawJsonValue) { _operations.Add(new JsonPatchOperation(JsonPatchOperationKind.Test, path, null, rawJsonValue)); } public void AppendTest<[System.Runtime.CompilerServices.Nullable(2)] T>(string path, T value) { _operations.Add(new JsonPatchOperation(JsonPatchOperationKind.Test, path, null, Serialize(value))); } [System.Runtime.CompilerServices.NullableContext(0)] public ReadOnlyMemory<byte> ToBytes() { if (!_rawDocument.IsEmpty && _operations.Count == 0) return _rawDocument; using (MemoryStream memoryStream = new MemoryStream()) { using (Utf8JsonWriter writer = new Utf8JsonWriter(memoryStream, default(JsonWriterOptions))) WriteTo(writer); return memoryStream.GetBuffer().AsMemory(0, (int)memoryStream.Length); } } public override string ToString() { return Encoding.UTF8.GetString(ToBytes().ToArray()); } private void WriteTo(Utf8JsonWriter writer) { writer.WriteStartArray(); if (!_rawDocument.IsEmpty) { using (JsonDocument jsonDocument = JsonDocument.Parse(_rawDocument, default(JsonDocumentOptions))) { foreach (JsonElement item in jsonDocument.RootElement.EnumerateArray()) { item.WriteTo(writer); } } } foreach (JsonPatchOperation operation in _operations) { writer.WriteStartObject(); writer.WriteString("op", operation.Kind.ToString()); if (operation.From != null) writer.WriteString("from", operation.From); writer.WriteString("path", operation.Path); if (operation.RawJsonValue != null) { using (JsonDocument jsonDocument2 = JsonDocument.Parse(operation.RawJsonValue, default(JsonDocumentOptions))) { writer.WritePropertyName("value"); jsonDocument2.WriteTo(writer); } } writer.WriteEndObject(); } writer.WriteEndArray(); } private string Serialize<[System.Runtime.CompilerServices.Nullable(2)] T>(T value) { using (MemoryStream memoryStream = new MemoryStream()) { _serializer.Serialize(memoryStream, value, typeof(T), default(CancellationToken)); return Encoding.UTF8.GetString(memoryStream.ToArray()); } } } }