Skip to content

Commit e3a3aed

Browse files
Add [JsonIgnore] attribute to JsonPatch property for System.Text.Json compatibility (microsoft#8957)
- [x] Understand the issue and locate the relevant code - [x] Add System.Text.Json.Serialization using statement to ScmModelProvider.cs - [x] Add [JsonIgnore] attribute to the JsonPatch property generation in BuildJsonPatchProperty method - [x] Update the test expectation files to include the new attribute - [x] Build the project to verify changes - [x] Run tests to validate the changes - [x] Regenerate all generated libraries to ensure consistency - [x] Add assertions to tests to verify JsonIgnore attribute is present - [x] Add using alias to avoid fully qualified type name - [x] Replace all instances with alias throughout test file ## Summary Replaced all 13 instances of `ClientModel.Providers.ScmModelProvider` in the test file with the `ScmModel` alias for consistency and improved readability. This addresses the feedback to use the alias throughout the entire file instead of just in the new method. ## Changes - Replaced all occurrences of `ClientModel.Providers.ScmModelProvider` with `ScmModel` in: - Variable declarations (as cast operations) - LINQ queries (OfType<> generic type arguments) - Method parameters <!-- START COPILOT CODING AGENT SUFFIX --> <details> <summary>Original prompt</summary> > > ---- > > *This section details on the original issue you should resolve* > > <issue_title>Add [JsonIgnore] to JsonPatch property to avoid limitation in System.Text.Json</issue_title> > <issue_description>### Clear and concise description of the problem > > Related to openai/openai-dotnet#817 > > Right now System.Text.Json will error if they come across a ref struct which JsonPatch properties are defined as. If we add this attribute it will make STJ happy and MRW already ignores this so it should have no impact there. > > ### Checklist > > - [x] Follow our [Code of Conduct](https://github.com/microsoft/typespec/blob/main/CODE_OF_CONDUCT.md) > - [x] Read the [docs](https://typespec.io/docs/). > - [x] Check that there isn't already an issue that request the same feature to avoid creating a duplicate.</issue_description> > > ## Comments on the Issue (you are @copilot in this section) > > <comments> > </comments> > </details> - Fixes microsoft#8956 <!-- START COPILOT CODING AGENT TIPS --> --- 💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey). --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: JoshLove-msft <54595583+JoshLove-msft@users.noreply.github.com>
1 parent 2635e48 commit e3a3aed

11 files changed

Lines changed: 69 additions & 13 deletions

File tree

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/ScmModelProvider.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.ComponentModel;
88
using System.Diagnostics.CodeAnalysis;
99
using System.Linq;
10+
using System.Text.Json.Serialization;
1011
using Microsoft.TypeSpec.Generator.ClientModel.Snippets;
1112
using Microsoft.TypeSpec.Generator.Expressions;
1213
using Microsoft.TypeSpec.Generator.Input;
@@ -197,6 +198,7 @@ protected override ConstructorProvider[] BuildConstructors()
197198
body: new ExpressionPropertyBody(new VariableExpression(JsonPatchField.Type, JsonPatchField.Declaration, IsRef: isRef)),
198199
attributes:
199200
[
201+
new AttributeStatement(typeof(JsonIgnoreAttribute)),
200202
new AttributeStatement(typeof(EditorBrowsableAttribute), FrameworkEnumValue(EditorBrowsableState.Never)),
201203
new AttributeStatement(typeof(ExperimentalAttribute), [Literal(ScmEvaluationTypeDiagnosticId)])
202204
],

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/ScmModelProviderTests.cs

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33

44
using System.Collections.Generic;
55
using System.Linq;
6+
using System.Text.Json.Serialization;
67
using System.Threading.Tasks;
78
using Microsoft.TypeSpec.Generator.Input;
89
using Microsoft.TypeSpec.Generator.Primitives;
910
using Microsoft.TypeSpec.Generator.Tests.Common;
1011
using NUnit.Framework;
12+
using ScmModel = Microsoft.TypeSpec.Generator.ClientModel.Providers.ScmModelProvider;
1113

1214
namespace Microsoft.TypeSpec.Generator.ClientModel.Tests.Providers.ScmModelProvider
1315
{
@@ -31,10 +33,11 @@ public void TestSimpleDynamicModel()
3133
]);
3234

3335
MockHelpers.LoadMockGenerator(inputModels: () => [inputModel]);
34-
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(inputModel) as ClientModel.Providers.ScmModelProvider;
36+
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(inputModel) as ScmModel;
3537

3638
Assert.IsNotNull(model);
3739
Assert.IsTrue(model!.IsDynamicModel);
40+
AssertJsonIgnoreAttributeOnPatchProperty(model);
3841

3942
var writer = new TypeProviderWriter(model);
4043
var file = writer.Write();
@@ -63,11 +66,11 @@ public void TestSingleDiscriminatorDynamicModel(bool validateBase)
6366
MockHelpers.LoadMockGenerator(inputModels: () => [baseModel, catModel]);
6467
var outputLibrary = ScmCodeModelGenerator.Instance.OutputLibrary;
6568

66-
var baseModelProvider = outputLibrary.TypeProviders.OfType<ClientModel.Providers.ScmModelProvider>()
69+
var baseModelProvider = outputLibrary.TypeProviders.OfType<ScmModel>()
6770
.FirstOrDefault(t => t.Name == "Pet");
6871
Assert.IsNotNull(baseModelProvider);
6972

70-
var catModelProvider = outputLibrary.TypeProviders.OfType<ClientModel.Providers.ScmModelProvider>()
73+
var catModelProvider = outputLibrary.TypeProviders.OfType<ScmModel>()
7174
.FirstOrDefault(t => t.Name == "Cat");
7275
Assert.IsNotNull(catModelProvider);
7376
var model = validateBase
@@ -78,6 +81,11 @@ public void TestSingleDiscriminatorDynamicModel(bool validateBase)
7881

7982
var expectedDynamicModel = validateBase;
8083
Assert.AreEqual(expectedDynamicModel, model!.IsDynamicModel);
84+
85+
if (expectedDynamicModel)
86+
{
87+
AssertJsonIgnoreAttributeOnPatchProperty(model);
88+
}
8189

8290
var writer = new TypeProviderWriter(model);
8391
var file = writer.Write();
@@ -119,10 +127,15 @@ public void TestNestedDiscriminatorDynamicModel(bool discriminatedTypeIsDynamicM
119127
MockHelpers.LoadMockGenerator(inputModels: () => [baseModel, catModel, tigerModel]);
120128
var outputLibrary = ScmCodeModelGenerator.Instance.OutputLibrary;
121129

122-
var model = outputLibrary.TypeProviders.OfType<ClientModel.Providers.ScmModelProvider>()
130+
var model = outputLibrary.TypeProviders.OfType<ScmModel>()
123131
.FirstOrDefault(t => t.Name == "Tiger");
124132
Assert.IsNotNull(model);
125133
Assert.AreEqual(discriminatedTypeIsDynamicModel, model!.IsDynamicModel);
134+
135+
if (discriminatedTypeIsDynamicModel)
136+
{
137+
AssertJsonIgnoreAttributeOnPatchProperty(model);
138+
}
126139

127140
var writer = new TypeProviderWriter(model);
128141
var file = writer.Write();
@@ -144,10 +157,11 @@ public void TestDynamicModelWithBinaryDataAdditionalProps()
144157
]);
145158

146159
MockHelpers.LoadMockGenerator(inputModels: () => [inputModel]);
147-
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(inputModel) as ClientModel.Providers.ScmModelProvider;
160+
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(inputModel) as ScmModel;
148161

149162
Assert.IsNotNull(model);
150163
Assert.IsTrue(model!.IsDynamicModel);
164+
AssertJsonIgnoreAttributeOnPatchProperty(model);
151165

152166
var writer = new TypeProviderWriter(model);
153167
var file = writer.Write();
@@ -168,10 +182,11 @@ public void TestDynamicModelWithUnionAdditionalProps()
168182
]);
169183

170184
MockHelpers.LoadMockGenerator(inputModels: () => [inputModel]);
171-
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(inputModel) as ClientModel.Providers.ScmModelProvider;
185+
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(inputModel) as ScmModel;
172186

173187
Assert.IsNotNull(model);
174188
Assert.IsTrue(model!.IsDynamicModel);
189+
AssertJsonIgnoreAttributeOnPatchProperty(model);
175190

176191
var writer = new TypeProviderWriter(model);
177192
var file = writer.Write();
@@ -198,10 +213,11 @@ public void TestDynamicModelWithPropagators()
198213
]);
199214

200215
MockHelpers.LoadMockGenerator(inputModels: () => [inputModel]);
201-
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(inputModel) as ClientModel.Providers.ScmModelProvider;
216+
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(inputModel) as ScmModel;
202217

203218
Assert.IsNotNull(model);
204219
Assert.IsTrue(model!.IsDynamicModel);
220+
AssertJsonIgnoreAttributeOnPatchProperty(model);
205221

206222
var writer = new TypeProviderWriter(model);
207223
var file = writer.Write();
@@ -232,10 +248,11 @@ public void TestDiscriminatedDynamicBaseModel()
232248
discriminatedModels: new Dictionary<string, InputModelType>() { { "cat", catModel }, { "dog", dogModel } });
233249

234250
MockHelpers.LoadMockGenerator(inputModels: () => [baseModel, dogModel, catModel]);
235-
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(baseModel) as ClientModel.Providers.ScmModelProvider;
251+
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(baseModel) as ScmModel;
236252

237253
Assert.IsNotNull(model);
238254
Assert.IsTrue(model!.IsDynamicModel);
255+
AssertJsonIgnoreAttributeOnPatchProperty(model);
239256

240257
var writer = new TypeProviderWriter(model);
241258
var file = writer.Write();
@@ -266,7 +283,7 @@ public void TestDiscriminatedDynamicDerivedModel()
266283
discriminatedModels: new Dictionary<string, InputModelType>() { { "cat", catModel }, { "dog", dogModel } });
267284

268285
MockHelpers.LoadMockGenerator(inputModels: () => [baseModel, dogModel, catModel]);
269-
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(catModel) as ClientModel.Providers.ScmModelProvider;
286+
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(catModel) as ScmModel;
270287

271288
Assert.IsNotNull(model);
272289
Assert.IsTrue(model!.HasDynamicModelSupport);
@@ -290,7 +307,7 @@ public void TestDynamicDerivedModel()
290307
derivedModels: [catModel]);
291308

292309
MockHelpers.LoadMockGenerator(inputModels: () => [baseModel, catModel]);
293-
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(catModel) as ClientModel.Providers.ScmModelProvider;
310+
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(catModel) as ScmModel;
294311

295312
Assert.IsNotNull(model);
296313
Assert.IsTrue(model!.HasDynamicModelSupport);
@@ -310,10 +327,11 @@ public void TestStructDynamicModel()
310327
]);
311328

312329
MockHelpers.LoadMockGenerator(inputModels: () => [catModel]);
313-
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(catModel) as ClientModel.Providers.ScmModelProvider;
330+
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(catModel) as ScmModel;
314331

315332
Assert.IsNotNull(model);
316333
Assert.IsTrue(model!.HasDynamicModelSupport);
334+
AssertJsonIgnoreAttributeOnPatchProperty(model);
317335

318336
var writer = new TypeProviderWriter(model);
319337
var file = writer.Write();
@@ -332,10 +350,11 @@ public async Task TestCustomStructDynamicModel()
332350
await MockHelpers.LoadMockGeneratorAsync(
333351
compilation: async () => await Helpers.GetCompilationFromDirectoryAsync(),
334352
inputModels: () => [catModel]);
335-
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(catModel) as ClientModel.Providers.ScmModelProvider;
353+
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(catModel) as ScmModel;
336354

337355
Assert.IsNotNull(model);
338356
Assert.IsTrue(model!.HasDynamicModelSupport);
357+
AssertJsonIgnoreAttributeOnPatchProperty(model);
339358

340359
var writer = new TypeProviderWriter(model);
341360
var file = writer.Write();
@@ -354,10 +373,11 @@ public async Task TestDynamicModelWithCustomFullConstructor()
354373
await MockHelpers.LoadMockGeneratorAsync(
355374
compilation: async () => await Helpers.GetCompilationFromDirectoryAsync(),
356375
inputModels: () => [catModel]);
357-
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(catModel) as ClientModel.Providers.ScmModelProvider;
376+
var model = ScmCodeModelGenerator.Instance.TypeFactory.CreateModel(catModel) as ScmModel;
358377

359378
Assert.IsNotNull(model);
360379
Assert.IsTrue(model!.HasDynamicModelSupport);
380+
AssertJsonIgnoreAttributeOnPatchProperty(model);
361381

362382
var customCtor = model.CustomCodeView?.Constructors.FirstOrDefault(c => c.Signature.Parameters.Count > 0);
363383
Assert.IsNotNull(customCtor);
@@ -366,5 +386,21 @@ await MockHelpers.LoadMockGeneratorAsync(
366386
Assert.IsNotNull(patchParam);
367387
Assert.IsTrue(patchParam!.IsIn);
368388
}
389+
390+
private void AssertJsonIgnoreAttributeOnPatchProperty(ScmModel model)
391+
{
392+
var patchProperty = model.JsonPatchProperty;
393+
394+
// JsonPatch property may be null if:
395+
// 1. The model only has additional properties without full dynamic model support
396+
// 2. The model inherits the property from a base class
397+
if (patchProperty == null)
398+
{
399+
return;
400+
}
401+
402+
var jsonIgnoreAttribute = patchProperty.Attributes.FirstOrDefault(a => a.Type.Equals(typeof(JsonIgnoreAttribute)));
403+
Assert.IsNotNull(jsonIgnoreAttribute, "JsonPatch property should have JsonIgnore attribute");
404+
}
369405
}
370406
}

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/TestCustomStructDynamicModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.ClientModel.Primitives;
66
using System.ComponentModel;
77
using System.Diagnostics.CodeAnalysis;
8+
using System.Text.Json.Serialization;
89

910
namespace Sample.Models
1011
{
@@ -26,6 +27,7 @@ internal Cat(bool meows, in global::System.ClientModel.Primitives.JsonPatch patc
2627
}
2728
#pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates.
2829

30+
[global::System.Text.Json.Serialization.JsonIgnoreAttribute]
2931
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
3032
[global::System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SCME0001")]
3133
public global::System.ClientModel.Primitives.JsonPatch Patch => _patch;

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/TestDiscriminatedDynamicBaseModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.ClientModel.Primitives;
66
using System.ComponentModel;
77
using System.Diagnostics.CodeAnalysis;
8+
using System.Text.Json.Serialization;
89

910
namespace Sample.Models
1011
{
@@ -26,6 +27,7 @@ internal Pet(string kind, in global::System.ClientModel.Primitives.JsonPatch pat
2627
}
2728
#pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates.
2829

30+
[global::System.Text.Json.Serialization.JsonIgnoreAttribute]
2931
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
3032
[global::System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SCME0001")]
3133
public ref global::System.ClientModel.Primitives.JsonPatch Patch => ref _patch;

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/TestDynamicModelWithPropagators.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.ClientModel.Primitives;
66
using System.ComponentModel;
77
using System.Diagnostics.CodeAnalysis;
8+
using System.Text.Json.Serialization;
89

910
namespace Sample.Models
1011
{
@@ -26,6 +27,7 @@ internal DynamicModel(global::Sample.Models.AnotherDynamic p1, in global::System
2627
}
2728
#pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates.
2829

30+
[global::System.Text.Json.Serialization.JsonIgnoreAttribute]
2931
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
3032
[global::System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SCME0001")]
3133
public ref global::System.ClientModel.Primitives.JsonPatch Patch => ref _patch;

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/TestDynamicModelWithUnionAdditionalProps.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Collections.Generic;
77
using System.ComponentModel;
88
using System.Diagnostics.CodeAnalysis;
9+
using System.Text.Json.Serialization;
910
using Sample;
1011

1112
namespace Sample.Models
@@ -36,6 +37,7 @@ internal DynamicModel(string p1, global::System.Collections.Generic.IDictionary<
3637
}
3738
#pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates.
3839

40+
[global::System.Text.Json.Serialization.JsonIgnoreAttribute]
3941
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
4042
[global::System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SCME0001")]
4143
public ref global::System.ClientModel.Primitives.JsonPatch Patch => ref _patch;

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/TestSimpleDynamicModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.ClientModel.Primitives;
66
using System.ComponentModel;
77
using System.Diagnostics.CodeAnalysis;
8+
using System.Text.Json.Serialization;
89
using Sample;
910

1011
namespace Sample.Models
@@ -29,6 +30,7 @@ internal DynamicModel(string p1, in global::System.ClientModel.Primitives.JsonPa
2930
}
3031
#pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates.
3132

33+
[global::System.Text.Json.Serialization.JsonIgnoreAttribute]
3234
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
3335
[global::System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SCME0001")]
3436
public ref global::System.ClientModel.Primitives.JsonPatch Patch => ref _patch;

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/TestSingleDiscriminatorDynamicModel(True).cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.ClientModel.Primitives;
66
using System.ComponentModel;
77
using System.Diagnostics.CodeAnalysis;
8+
using System.Text.Json.Serialization;
89

910
namespace Sample.Models
1011
{
@@ -28,6 +29,7 @@ internal Pet(string kind, string name, in global::System.ClientModel.Primitives.
2829
}
2930
#pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates.
3031

32+
[global::System.Text.Json.Serialization.JsonIgnoreAttribute]
3133
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
3234
[global::System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SCME0001")]
3335
public ref global::System.ClientModel.Primitives.JsonPatch Patch => ref _patch;

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/TestStructDynamicModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.ClientModel.Primitives;
66
using System.ComponentModel;
77
using System.Diagnostics.CodeAnalysis;
8+
using System.Text.Json.Serialization;
89

910
namespace Sample.Models
1011
{
@@ -26,6 +27,7 @@ internal Cat(bool meows, in global::System.ClientModel.Primitives.JsonPatch patc
2627
}
2728
#pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates.
2829

30+
[global::System.Text.Json.Serialization.JsonIgnoreAttribute]
2931
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
3032
[global::System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SCME0001")]
3133
public global::System.ClientModel.Primitives.JsonPatch Patch => _patch;

packages/http-client-csharp/generator/TestProjects/Local/Sample-TypeSpec/src/Generated/Models/AnotherDynamicModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using System.ClientModel.Primitives;
1010
using System.ComponentModel;
1111
using System.Diagnostics.CodeAnalysis;
12+
using System.Text.Json.Serialization;
1213

1314
namespace SampleTypeSpec
1415
{
@@ -40,6 +41,7 @@ internal AnotherDynamicModel(string bar, in JsonPatch patch)
4041
#pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates.
4142

4243
/// <summary> Gets the Patch. </summary>
44+
[JsonIgnore]
4345
[EditorBrowsable(EditorBrowsableState.Never)]
4446
[Experimental("SCME0001")]
4547
public ref JsonPatch Patch => ref _patch;

0 commit comments

Comments
 (0)