Add xml serialization visitor#56200
Merged
jorgerangel-msft merged 2 commits intoAzure:mainfrom Feb 13, 2026
Merged
Conversation
1de4ae9 to
56d1c9f
Compare
56d1c9f to
916d7f7
Compare
Contributor
There was a problem hiding this comment.
Pull request overview
Adds XML serialization support to the Azure Generator by introducing an XmlSerializableVisitor that wires up Azure.Core.IXmlSerializable on XML-enabled models and updates XML writing helpers accordingly. This is exercised via new/updated generated test projects (Spector payload/xml and Basic-TypeSpec XML models/operations) plus new unit tests validating the visitor behavior.
Changes:
- Add
XmlSerializableVisitorto implementIXmlSerializable.Write(...)for XML models, updateWriteObjectValueto routeIXmlSerializablefirst, and adjustRequestContentoperators for XML-only vs JSON+XML models. - Add a new Spector
http/payload/xmltest project and NUnit tests verifying XML payload roundtrips. - Regenerate/update Local Basic-TypeSpec XML models/clients and scaffolding to include shared XML serialization sources (
IXmlSerializable.cs,XmlWriterContent.cs).
Reviewed changes
Copilot reviewed 21 out of 82 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Payload.Xml.csproj | New Spector payload/xml test project; includes shared XML serialization sources. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/XmlClientOptions.cs | New generated client options for payload/xml scenario. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/XmlClient.cs | New generated client surface for payload/xml scenario. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/SimpleModelValue.cs | New generated operation group client for SimpleModel XML payloads. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/PayloadXmlModelFactory.cs | New model factory for payload/xml models. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/PayloadXmlClientBuilderExtensions.cs | New DI extensions for the payload/xml client. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/SimpleModel.cs | New generated model for XML payload tests. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/SimpleModel.Serialization.cs | Adds IXmlSerializable to generated model serialization partial. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/PayloadXmlContext.cs | New MRW context for payload/xml models. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithUnwrappedArray.cs | New generated XML model (unwrapped array). |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithUnwrappedArray.Serialization.cs | Adds IXmlSerializable to XML model serialization partial. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithText.cs | New generated XML model (text content). |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithText.Serialization.cs | Adds IXmlSerializable to XML model serialization partial. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithSimpleArrays.cs | New generated XML model (simple arrays). |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithSimpleArrays.Serialization.cs | Adds IXmlSerializable to XML model serialization partial. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithRenamedFields.cs | New generated XML model (renamed fields). |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithRenamedFields.Serialization.cs | Adds IXmlSerializable to XML model serialization partial. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithRenamedArrays.cs | New generated XML model (renamed arrays). |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithRenamedArrays.Serialization.cs | Adds IXmlSerializable to XML model serialization partial. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithOptionalField.cs | New generated XML model (optional field). |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithOptionalField.Serialization.cs | Adds IXmlSerializable to XML model serialization partial. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithEncodedNames.cs | New generated XML model (encoded names). |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithEncodedNames.Serialization.cs | Adds IXmlSerializable to XML model serialization partial. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithEmptyArray.cs | New generated XML model (empty array). |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithEmptyArray.Serialization.cs | Adds IXmlSerializable to XML model serialization partial. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithDictionary.cs | New generated XML model (dictionary). |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithDictionary.Serialization.cs | Adds IXmlSerializable to XML model serialization partial. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithAttributes.cs | New generated XML model (attributes). |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithAttributes.Serialization.cs | Adds IXmlSerializable to XML model serialization partial. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithArrayOfModel.cs | New generated XML model (array of models). |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/Models/ModelWithArrayOfModel.Serialization.cs | Adds IXmlSerializable to XML model serialization partial. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/ModelWithUnwrappedArrayValue.cs | New generated operation group client for XML model. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/ModelWithTextValue.cs | New generated operation group client for XML model. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/ModelWithSimpleArraysValue.cs | New generated operation group client for XML model. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/ModelWithRenamedFieldsValue.cs | New generated operation group client for XML model. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/ModelWithRenamedArraysValue.cs | New generated operation group client for XML model. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/ModelWithOptionalFieldValue.cs | New generated operation group client for XML model. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/ModelWithEncodedNamesValue.cs | New generated operation group client for XML model. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/ModelWithEmptyArrayValue.cs | New generated operation group client for XML model. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/ModelWithDictionaryValue.cs | New generated operation group client for XML model. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/ModelWithAttributesValue.cs | New generated operation group client for XML model. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Generated/ModelWithArrayOfModelValue.cs | New generated operation group client for XML model. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/metadata.json | New metadata.json for the Spector payload/xml test package. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/Payload.Xml.sln | New solution file for the payload/xml test project. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/Configuration.json | New generator configuration for payload/xml test project. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector.Tests/TestProjects.Spector.Tests.csproj | Adds reference to the new payload/xml test project. |
| eng/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Http/Payload/Xml/XmlTests.cs | New end-to-end NUnit tests for XML payload scenarios. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/PlantOperations.cs | Adds UpdateTree protocol/convenience methods for XML PUT scenario. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/PlantOperations.RestClient.cs | Adds REST request creation for UpdateTree PUT with XML content type. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/XmlNestedModel.cs | Makes XML model public/settable as part of regenerated XML scenario surface. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/XmlNestedModel.Serialization.cs | Adds IXmlSerializable explicit write hook to XML model serialization. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/XmlModelWithNamespace.cs | Makes XML model public/settable as part of regenerated XML scenario surface. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/XmlModelWithNamespace.Serialization.cs | Adds IXmlSerializable explicit write hook to XML model serialization. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/XmlItem.cs | Makes XML model public/settable as part of regenerated XML scenario surface. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/XmlItem.Serialization.cs | Adds IXmlSerializable explicit write hook to XML model serialization. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/XmlAdvancedModel.cs | Updates advanced XML model surface (null guards + settable props) in regenerated output. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/XmlAdvancedModel.Serialization.cs | Adds IXmlSerializable + XML-specific implicit RequestContent operator behavior. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/UnknownPlant.Serialization.cs | Adds IXmlSerializable explicit write hook for polymorphic XML model. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Tree.cs | Makes Tree public/settable in regenerated output for XML update scenarios. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Tree.Serialization.cs | Adds IXmlSerializable + implicit RequestContent operator integration. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Plant.cs | Updates base model properties to settable in regenerated output. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Plant.Serialization.cs | Adds IXmlSerializable explicit write hook on base polymorphic model. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/ModelSerializationExtensions.cs | Updates XmlWriter WriteObjectValue to dispatch IXmlSerializable and accept nameHint. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClient.cs | Adds UpdateXmlAdvancedModel protocol/convenience methods for XML PUT scenario. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClient.RestClient.cs | Adds REST request creation for UpdateXmlAdvancedModel PUT with XML content type. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/BasicTypeSpec.csproj | Includes shared XML serialization sources in Local Basic-TypeSpec project. |
| eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/Basic-TypeSpec.tsp | Adds new XML PUT operations to exercise XML request serialization. |
| eng/packages/http-client-csharp/generator/TestProjects/Local.Tests/TestProjects.Local.Tests.csproj | Includes shared XML serialization sources for Local test compilation. |
| eng/packages/http-client-csharp/generator/Azure.Generator/test/common/InputFactory.cs | Extends test InputModel factory to accept serialization options. |
| eng/packages/http-client-csharp/generator/Azure.Generator/test/Visitors/XmlSerializableVisitorTests.cs | New unit tests for XmlSerializableVisitor behavior. |
| eng/packages/http-client-csharp/generator/Azure.Generator/test/Visitors/TestData/XmlSerializableVisitorTests/XmlOnlyModel_ImplicitOperatorUsesXmlWriterContent.cs | Expected output for XML-only implicit operator update. |
| eng/packages/http-client-csharp/generator/Azure.Generator/test/Visitors/TestData/XmlSerializableVisitorTests/WriteMethodHasCorrectBody.cs | Expected output for generated IXmlSerializable.Write body. |
| eng/packages/http-client-csharp/generator/Azure.Generator/test/Visitors/TestData/XmlSerializableVisitorTests/JsonAndXmlModel_ImplicitOperatorUsesRequestContentCreate.cs | Expected output for JSON+XML implicit operator update. |
| eng/packages/http-client-csharp/generator/Azure.Generator/src/Visitors/XmlSerializableVisitor.cs | New visitor implementing IXmlSerializable generation + WriteObjectValue dispatch update. |
| eng/packages/http-client-csharp/generator/Azure.Generator/src/Snippets/XmlWriterContentSnippets.cs | Adds snippet helper for XmlWriterContent.XmlWriter access in codegen. |
| eng/packages/http-client-csharp/generator/Azure.Generator/src/Properties/launchSettings.json | Adds launch profile for running generator against Spector payload/xml project. |
| eng/packages/http-client-csharp/generator/Azure.Generator/src/Primitives/NewAzureProjectScaffolding.cs | Ensures new projects include XML shared sources when XML model serialization is present. |
| eng/packages/http-client-csharp/generator/Azure.Generator/src/AzureClientGenerator.cs | Registers XmlSerializableVisitor in generator pipeline. |
| eng/packages/http-client-csharp/generator/Azure.Generator/src/Azure.Generator.csproj | Includes shared XML serialization sources in generator project build outputs. |
| eng/packages/http-client-csharp/eng/scripts/Spector-Helper.psm1 | Removes payload/xml from failing specs list (now expected to pass). |
...es/http-client-csharp/generator/TestProjects/Spector.Tests/TestProjects.Spector.Tests.csproj
Show resolved
Hide resolved
JoshLove-msft
approved these changes
Feb 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
fixes: #55280
depends on #56228