From 438972e30a72663b0f1bb61644796fe51a0f9e8e Mon Sep 17 00:00:00 2001 From: Fabian Wetzel Date: Wed, 2 Feb 2022 13:48:09 +0100 Subject: [PATCH 1/2] added test case for https://github.com/mganss/XmlSchemaClassGenerator/issues/303 --- XmlSchemaClassGenerator.Tests/XmlTests.cs | 51 +++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/XmlSchemaClassGenerator.Tests/XmlTests.cs b/XmlSchemaClassGenerator.Tests/XmlTests.cs index 4b8b0f0e..a81237d5 100644 --- a/XmlSchemaClassGenerator.Tests/XmlTests.cs +++ b/XmlSchemaClassGenerator.Tests/XmlTests.cs @@ -1765,6 +1765,57 @@ public void RenameInterfacePropertyInDerivedClassTest() Assert.Equal("ClassItemBaseProperty", level3Interface.GetProperties().First().Name); } + [Fact] + public void RefTypesGetNoXmlElementAttributeTest() + { + const string xsd = @" + + + + + + + + + + + + + + + + + + + + + + +"; + + var generator = new Generator + { + NamespaceProvider = new NamespaceProvider + { + GenerateNamespace = key => "Test" + }, + GenerateInterfaces = true, + AssemblyVisible = true + }; + var contents = ConvertXml(nameof(RefTypesGetNoXmlElementAttributeTest), xsd, generator); + var content = Assert.Single(contents); + + var assembly = Compiler.Compile(nameof(RefTypesGetNoXmlElementAttributeTest), content); + var classType = assembly.GetType("Test.SampleRoot"); + Assert.NotNull(classType); + + var directProperty = Assert.Single(classType.GetProperties().Where(p => p.Name == "Direct")); + Assert.NotEmpty(directProperty.GetCustomAttributes()); + + var viaRefProperty = Assert.Single(classType.GetProperties().Where(p => p.Name == "ViaRef")); + Assert.Empty(viaRefProperty.GetCustomAttributes()); + } + [Fact] public void DoNotGenerateSamePropertiesInDerivedInterfacesClassTest() { From c52f2480de7fdaf82f17150183bf71f31ad12665 Mon Sep 17 00:00:00 2001 From: Fabian Wetzel Date: Wed, 2 Feb 2022 16:27:16 +0100 Subject: [PATCH 2/2] 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);