Skip to content

Add xml serialization visitor#56200

Merged
jorgerangel-msft merged 2 commits intoAzure:mainfrom
jorgerangel-msft:xml-visitor
Feb 13, 2026
Merged

Add xml serialization visitor#56200
jorgerangel-msft merged 2 commits intoAzure:mainfrom
jorgerangel-msft:xml-visitor

Conversation

@jorgerangel-msft
Copy link
Member

@jorgerangel-msft jorgerangel-msft commented Feb 11, 2026

fixes: #55280

depends on #56228

@github-actions github-actions bot added AI Model Inference AI Projects Client This issue is related to a non-management package CodeGen Issues that relate to code generation Speech Transcription labels Feb 11, 2026
@jorgerangel-msft jorgerangel-msft force-pushed the xml-visitor branch 6 times, most recently from 1de4ae9 to 56d1c9f Compare February 12, 2026 20:58
@jorgerangel-msft jorgerangel-msft changed the title [wip] add xml visitor [wip] Add xml serialization visitor Feb 12, 2026
@jorgerangel-msft jorgerangel-msft changed the title [wip] Add xml serialization visitor Add xml serialization visitor Feb 12, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 XmlSerializableVisitor to implement IXmlSerializable.Write(...) for XML models, update WriteObjectValue to route IXmlSerializable first, and adjust RequestContent operators for XML-only vs JSON+XML models.
  • Add a new Spector http/payload/xml test 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).

@jorgerangel-msft jorgerangel-msft merged commit aafef0c into Azure:main Feb 13, 2026
15 checks passed
@jorgerangel-msft jorgerangel-msft deleted the xml-visitor branch February 13, 2026 00:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Client This issue is related to a non-management package CodeGen Issues that relate to code generation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Create Xml Serialization Visitor

3 participants