From c52f2480de7fdaf82f17150183bf71f31ad12665 Mon Sep 17 00:00:00 2001 From: Fabian Wetzel Date: Wed, 2 Feb 2022 16:27:16 +0100 Subject: [PATCH] generated Form fixed for ref-elements --- XmlSchemaClassGenerator.Tests/XmlTests.cs | 4 ++-- XmlSchemaClassGenerator/ModelBuilder.cs | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/XmlSchemaClassGenerator.Tests/XmlTests.cs b/XmlSchemaClassGenerator.Tests/XmlTests.cs index a81237d5..0c377936 100644 --- a/XmlSchemaClassGenerator.Tests/XmlTests.cs +++ b/XmlSchemaClassGenerator.Tests/XmlTests.cs @@ -1810,10 +1810,10 @@ public void RefTypesGetNoXmlElementAttributeTest() Assert.NotNull(classType); var directProperty = Assert.Single(classType.GetProperties().Where(p => p.Name == "Direct")); - Assert.NotEmpty(directProperty.GetCustomAttributes()); + Assert.Equal(XmlSchemaForm.Unqualified, directProperty.GetCustomAttributes().FirstOrDefault()?.Form); var viaRefProperty = Assert.Single(classType.GetProperties().Where(p => p.Name == "ViaRef")); - Assert.Empty(viaRefProperty.GetCustomAttributes()); + Assert.Equal(XmlSchemaForm.None, viaRefProperty.GetCustomAttributes().FirstOrDefault()?.Form); } [Fact] diff --git a/XmlSchemaClassGenerator/ModelBuilder.cs b/XmlSchemaClassGenerator/ModelBuilder.cs index a11d25c5..51dea5db 100644 --- a/XmlSchemaClassGenerator/ModelBuilder.cs +++ b/XmlSchemaClassGenerator/ModelBuilder.cs @@ -912,7 +912,6 @@ private IEnumerable CreatePropertiesForElements(Uri source, TypeM IsCollection = item.MaxOccurs > 1.0m || particle.MaxOccurs > 1.0m, // http://msdn.microsoft.com/en-us/library/vstudio/d3hx2s7e(v=vs.100).aspx DefaultValue = element.DefaultValue ?? ((item.MinOccurs >= 1.0m && item.XmlParent is not XmlSchemaChoice) ? element.FixedValue : null), FixedValue = element.FixedValue, - Form = element.Form == XmlSchemaForm.None ? element.GetSchema().ElementFormDefault : element.Form, XmlNamespace = !string.IsNullOrEmpty(effectiveElement.QualifiedName.Namespace) && effectiveElement.QualifiedName.Namespace != typeModel.XmlSchemaName.Namespace ? effectiveElement.QualifiedName.Namespace : null, XmlParticle = item.XmlParticle, @@ -920,6 +919,16 @@ private IEnumerable CreatePropertiesForElements(Uri source, TypeM Particle = item }; + if (element.Form == XmlSchemaForm.None) + { + if (element.RefName != null && !element.RefName.IsEmpty) + property.Form = XmlSchemaForm.Qualified; + else + property.Form = element.GetSchema().ElementFormDefault; + } + else + property.Form = element.Form; + if (property.IsArray && !_configuration.GenerateComplexTypesForCollections) { property.Type.Namespace.Types.Remove(property.Type.Name);