Skip to content

Commit 8b0fcf3

Browse files
Pass ModelReaderWriterContext in generated TryResolve{Property}Array helpers (#10839)
The `TryResolve{Property}Array` helpers were emitting `ModelReaderWriter.Write(collection, options)` without the `ModelReaderWriterContext` argument, breaking AOT-trimmed builds (e.g. OpenAI) where the context-less overload isn't preserved. ## Changes - **`ModelReaderWriterOptionsSnippets.cs`**: Added a new `JsonFormatProperty` snippet that returns the `ModelReaderWriterOptions.Json` static property. - **`MrwSerializationTypeDefinition.Dynamic.cs`**: In `BuildTryResolveArrayMethod`, append `ModelReaderWriterContextSnippets.Default` to the `ModelReaderWriter.Write` invocation, mirroring the pattern already used in `BuildPersistableModelWriteCoreMethodBody` and the XML serialization path. Also simplified the options argument to use the new `ModelReaderWriterOptionsSnippets.JsonFormatProperty` snippet instead of `new ModelReaderWriterOptions("J")`. - **Test baseline**: Update `PropagateModelListPropertyHelperMethods.cs` to expect the third argument and the `ModelReaderWriterOptions.Json` static. Generated output now matches the rest of the emitter: ```csharp global::System.BinaryData data = global::System.ClientModel.Primitives.ModelReaderWriter.Write( ActiveP1(), global::System.ClientModel.Primitives.ModelReaderWriterOptions.Json, global::Sample.SampleContext.Default); ``` --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jorgerangel-msft <102122018+jorgerangel-msft@users.noreply.github.com>
1 parent 90dfcc1 commit 8b0fcf3

4 files changed

Lines changed: 5 additions & 3 deletions

File tree

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,8 @@ private MethodProvider BuildTryResolveArrayMethod(PropertyProvider property)
531531
var dataDeclStatement = Declare("data", typeof(BinaryData),
532532
Static(typeof(ModelReaderWriter)).Invoke(nameof(ModelReaderWriter.Write), [
533533
new InvokeMethodExpression(null, $"Active{property.Name}", []),
534-
New.Instance(typeof(ModelReaderWriterOptions), Literal("J"))
534+
ModelReaderWriterOptionsSnippets.JsonFormatProperty,
535+
ModelReaderWriterContextSnippets.Default
535536
]),
536537
out var dataVar);
537538

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Snippets/ModelReaderWriterOptionsSnippets.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ internal static class ModelReaderWriterOptionsSnippets
1515
internal static ScopedApi<string> WireFormat => Literal("W");
1616
internal static ScopedApi<string> JsonFormat => Literal("J");
1717
internal static ScopedApi<string> XmlFormat => Literal("X");
18+
internal static ScopedApi<ModelReaderWriterOptions> JsonFormatProperty => Static(typeof(ModelReaderWriterOptions)).Property(nameof(ModelReaderWriterOptions.Json)).As<ModelReaderWriterOptions>();
1819
internal static ScopedApi<ModelReaderWriterOptions> InitializeWireOptions => New.Instance(typeof(ModelReaderWriterOptions), Wire).As<ModelReaderWriterOptions>();
1920
}
2021
}

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MrwSerializationTypeDefinitions/TestData/DynamicModelSerializationTests/PropagateModelListPropertyHelperMethods.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public partial class DynamicModel
1515
private bool TryResolveP1Array(out global::System.ClientModel.Primitives.JsonPatch.EncodedValue value)
1616
{
1717
value = default;
18-
global::System.BinaryData data = global::System.ClientModel.Primitives.ModelReaderWriter.Write(ActiveP1(), new global::System.ClientModel.Primitives.ModelReaderWriterOptions("J"));
18+
global::System.BinaryData data = global::System.ClientModel.Primitives.ModelReaderWriter.Write(ActiveP1(), global::System.ClientModel.Primitives.ModelReaderWriterOptions.Json, global::Sample.SampleContext.Default);
1919
global::System.ClientModel.Primitives.JsonPatch tempPatch = new global::System.ClientModel.Primitives.JsonPatch();
2020
tempPatch.Set("$"u8, data.ToMemory().Span);
2121
return tempPatch.TryGetEncodedValue("$"u8, out value);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@ private bool PropagateSet(ReadOnlySpan<byte> jsonPath, JsonPatch.EncodedValue va
978978
private bool TryResolveListFooArray(out JsonPatch.EncodedValue value)
979979
{
980980
value = default;
981-
BinaryData data = ModelReaderWriter.Write(ActiveListFoo(), new ModelReaderWriterOptions("J"));
981+
BinaryData data = ModelReaderWriter.Write(ActiveListFoo(), ModelReaderWriterOptions.Json, SampleTypeSpecContext.Default);
982982
JsonPatch tempPatch = new JsonPatch();
983983
tempPatch.Set("$"u8, data.ToMemory().Span);
984984
return tempPatch.TryGetEncodedValue("$"u8, out value);

0 commit comments

Comments
 (0)