Skip to content

Commit bf65ce9

Browse files
Fix AOT-unsafe BinaryData.FromObjectAsJson in pagination code generation (#53707)
* Initial plan * Replace FromObjectAsJson with AOT-safe WriteObjectValue in AzureCollectionResultDefinition Co-authored-by: JoshLove-msft <[email protected]> * Use ModelReaderWriter.Write instead of manual serialization for AOT compatibility Co-authored-by: JoshLove-msft <[email protected]> * Regenerate test projects with ModelReaderWriter.Write changes Co-authored-by: JoshLove-msft <[email protected]> * Update test data to use ModelReaderWriter.Write instead of FromObjectAsJson Co-authored-by: JoshLove-msft <[email protected]> * fix tests --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: JoshLove-msft <[email protected]> Co-authored-by: jolov <[email protected]>
1 parent d9d9880 commit bf65ce9

24 files changed

+49
-25
lines changed

eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/AzureCollectionResultDefinition.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT License.
33

44
using System;
5+
using System.ClientModel.Primitives;
56
using System.Collections.Generic;
67
using System.IO;
78
using System.Linq;
@@ -150,9 +151,9 @@ private MethodBodyStatement[] ConvertItemsToListOfBinaryData(VariableExpression
150151
[
151152
Declare("items", new CSharpType(typeof(List<>), typeof(BinaryData)),
152153
New.Instance(new CSharpType(typeof(List<>), typeof(BinaryData))), out itemsVariable),
153-
new ForEachStatement("item", BuildGetPropertyExpression(Paging.ItemPropertySegments, responseVariable).As<IEnumerable<KeyValuePair<string, object>>>(), out var itemVariable)
154+
new ForEachStatement("item", BuildGetPropertyExpression(Paging.ItemPropertySegments, responseVariable).As<IEnumerable<object>>(), out var itemVariable)
154155
{
155-
itemsVariable.Invoke("Add", [Static<BinaryData>().Invoke("FromObjectAsJson", [itemVariable])]).Terminate()
156+
itemsVariable.Invoke("Add", Static(typeof(ModelReaderWriter)).Invoke(nameof(ModelReaderWriter.Write), new ValueExpression[] { itemVariable, Static<ModelSerializationExtensionsDefinition>().Property("WireOptions") })).Terminate()
156157
}
157158
];
158159
}

eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/CollectionResultDefinitions/TestData/ContinuationTokenTests/ContinuationTokenInBody.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#nullable disable
77

88
using System;
9+
using System.ClientModel.Primitives;
910
using System.Collections.Generic;
1011
using Azure;
1112
using Azure.Core;
@@ -53,7 +54,7 @@ public CatClientGetCatsCollectionResult(global::Samples.CatClient client, string
5354
global::System.Collections.Generic.List<global::System.BinaryData> items = new global::System.Collections.Generic.List<global::System.BinaryData>();
5455
foreach (var item in result.Cats)
5556
{
56-
items.Add(global::System.BinaryData.FromObjectAsJson(item));
57+
items.Add(global::System.ClientModel.Primitives.ModelReaderWriter.Write(item, global::Samples.ModelSerializationExtensions.WireOptions));
5758
}
5859
yield return global::Azure.Page<global::System.BinaryData>.FromValues(items, nextPage, response);
5960
nextPage = result.NextPage;

eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/CollectionResultDefinitions/TestData/ContinuationTokenTests/ContinuationTokenInBodyAsync.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#nullable disable
77

88
using System;
9+
using System.ClientModel.Primitives;
910
using System.Collections.Generic;
1011
using System.Threading.Tasks;
1112
using Azure;
@@ -54,7 +55,7 @@ public CatClientGetCatsAsyncCollectionResult(global::Samples.CatClient client, s
5455
global::System.Collections.Generic.List<global::System.BinaryData> items = new global::System.Collections.Generic.List<global::System.BinaryData>();
5556
foreach (var item in result.Cats)
5657
{
57-
items.Add(global::System.BinaryData.FromObjectAsJson(item));
58+
items.Add(global::System.ClientModel.Primitives.ModelReaderWriter.Write(item, global::Samples.ModelSerializationExtensions.WireOptions));
5859
}
5960
yield return global::Azure.Page<global::System.BinaryData>.FromValues(items, nextPage, response);
6061
nextPage = result.NextPage;

eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/CollectionResultDefinitions/TestData/ContinuationTokenTests/ContinuationTokenInHeader.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#nullable disable
77

88
using System;
9+
using System.ClientModel.Primitives;
910
using System.Collections.Generic;
1011
using Azure;
1112
using Azure.Core;
@@ -53,7 +54,7 @@ public CatClientGetCatsCollectionResult(global::Samples.CatClient client, string
5354
global::System.Collections.Generic.List<global::System.BinaryData> items = new global::System.Collections.Generic.List<global::System.BinaryData>();
5455
foreach (var item in result.Cats)
5556
{
56-
items.Add(global::System.BinaryData.FromObjectAsJson(item));
57+
items.Add(global::System.ClientModel.Primitives.ModelReaderWriter.Write(item, global::Samples.ModelSerializationExtensions.WireOptions));
5758
}
5859
yield return global::Azure.Page<global::System.BinaryData>.FromValues(items, nextPage, response);
5960
if (response.Headers.TryGetValue("nextPage", out string value))

eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/CollectionResultDefinitions/TestData/ContinuationTokenTests/ContinuationTokenInHeaderAsync.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#nullable disable
77

88
using System;
9+
using System.ClientModel.Primitives;
910
using System.Collections.Generic;
1011
using System.Threading.Tasks;
1112
using Azure;
@@ -54,7 +55,7 @@ public CatClientGetCatsAsyncCollectionResult(global::Samples.CatClient client, s
5455
global::System.Collections.Generic.List<global::System.BinaryData> items = new global::System.Collections.Generic.List<global::System.BinaryData>();
5556
foreach (var item in result.Cats)
5657
{
57-
items.Add(global::System.BinaryData.FromObjectAsJson(item));
58+
items.Add(global::System.ClientModel.Primitives.ModelReaderWriter.Write(item, global::Samples.ModelSerializationExtensions.WireOptions));
5859
}
5960
yield return global::Azure.Page<global::System.BinaryData>.FromValues(items, nextPage, response);
6061
if (response.Headers.TryGetValue("nextPage", out string value))

eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/CollectionResultDefinitions/TestData/ListPageableTests/NoNextLinkOrContinuationToken.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#nullable disable
77

88
using System;
9+
using System.ClientModel.Primitives;
910
using System.Collections.Generic;
1011
using Azure;
1112
using Azure.Core;
@@ -46,7 +47,7 @@ public CatClientGetCatsCollectionResult(global::Samples.CatClient client, string
4647
global::System.Collections.Generic.List<global::System.BinaryData> items = new global::System.Collections.Generic.List<global::System.BinaryData>();
4748
foreach (var item in result.Cats)
4849
{
49-
items.Add(global::System.BinaryData.FromObjectAsJson(item));
50+
items.Add(global::System.ClientModel.Primitives.ModelReaderWriter.Write(item, global::Samples.ModelSerializationExtensions.WireOptions));
5051
}
5152
yield return global::Azure.Page<global::System.BinaryData>.FromValues(items, null, response);
5253
}

eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/CollectionResultDefinitions/TestData/ListPageableTests/NoNextLinkOrContinuationTokenAsync.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#nullable disable
77

88
using System;
9+
using System.ClientModel.Primitives;
910
using System.Collections.Generic;
1011
using System.Threading.Tasks;
1112
using Azure;
@@ -47,7 +48,7 @@ public CatClientGetCatsAsyncCollectionResult(global::Samples.CatClient client, s
4748
global::System.Collections.Generic.List<global::System.BinaryData> items = new global::System.Collections.Generic.List<global::System.BinaryData>();
4849
foreach (var item in result.Cats)
4950
{
50-
items.Add(global::System.BinaryData.FromObjectAsJson(item));
51+
items.Add(global::System.ClientModel.Primitives.ModelReaderWriter.Write(item, global::Samples.ModelSerializationExtensions.WireOptions));
5152
}
5253
yield return global::Azure.Page<global::System.BinaryData>.FromValues(items, null, response);
5354
}

eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/CollectionResultDefinitions/TestData/NextLinkTests/NextLinkInBody.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#nullable disable
77

88
using System;
9+
using System.ClientModel.Primitives;
910
using System.Collections.Generic;
1011
using Azure;
1112
using Azure.Core;
@@ -46,7 +47,7 @@ public CatClientGetCatsCollectionResult(global::Samples.CatClient client, global
4647
global::System.Collections.Generic.List<global::System.BinaryData> items = new global::System.Collections.Generic.List<global::System.BinaryData>();
4748
foreach (var item in result.Cats)
4849
{
49-
items.Add(global::System.BinaryData.FromObjectAsJson(item));
50+
items.Add(global::System.ClientModel.Primitives.ModelReaderWriter.Write(item, global::Samples.ModelSerializationExtensions.WireOptions));
5051
}
5152
yield return global::Azure.Page<global::System.BinaryData>.FromValues(items, nextPage?.AbsoluteUri, response);
5253
nextPage = result.NextCat;

eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/CollectionResultDefinitions/TestData/NextLinkTests/NextLinkInBodyAsync.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#nullable disable
77

88
using System;
9+
using System.ClientModel.Primitives;
910
using System.Collections.Generic;
1011
using System.Threading.Tasks;
1112
using Azure;
@@ -47,7 +48,7 @@ public CatClientGetCatsAsyncCollectionResult(global::Samples.CatClient client, g
4748
global::System.Collections.Generic.List<global::System.BinaryData> items = new global::System.Collections.Generic.List<global::System.BinaryData>();
4849
foreach (var item in result.Cats)
4950
{
50-
items.Add(global::System.BinaryData.FromObjectAsJson(item));
51+
items.Add(global::System.ClientModel.Primitives.ModelReaderWriter.Write(item, global::Samples.ModelSerializationExtensions.WireOptions));
5152
}
5253
yield return global::Azure.Page<global::System.BinaryData>.FromValues(items, nextPage?.AbsoluteUri, response);
5354
nextPage = result.NextCat;

eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/CollectionResultDefinitions/TestData/NextLinkTests/NextLinkInBodyWithStringProperty.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#nullable disable
77

88
using System;
9+
using System.ClientModel.Primitives;
910
using System.Collections.Generic;
1011
using Azure;
1112
using Azure.Core;
@@ -46,7 +47,7 @@ public CatClientGetCatsCollectionResult(global::Samples.CatClient client, global
4647
global::System.Collections.Generic.List<global::System.BinaryData> items = new global::System.Collections.Generic.List<global::System.BinaryData>();
4748
foreach (var item in result.Cats)
4849
{
49-
items.Add(global::System.BinaryData.FromObjectAsJson(item));
50+
items.Add(global::System.ClientModel.Primitives.ModelReaderWriter.Write(item, global::Samples.ModelSerializationExtensions.WireOptions));
5051
}
5152
yield return global::Azure.Page<global::System.BinaryData>.FromValues(items, nextPage?.AbsoluteUri, response);
5253
string nextPageString = result.NextCat;

0 commit comments

Comments
 (0)