diff --git a/XmlSchemaClassGenerator.Tests/XmlTests.cs b/XmlSchemaClassGenerator.Tests/XmlTests.cs index fe18a4f0..4edee63a 100644 --- a/XmlSchemaClassGenerator.Tests/XmlTests.cs +++ b/XmlSchemaClassGenerator.Tests/XmlTests.cs @@ -2617,7 +2617,8 @@ public void TestNetex() CollectionSettersMode = CollectionSettersMode.Public, EmitOrder = true, SeparateSubstitutes = true, - GenerateInterfaces = false + GenerateInterfaces = false, + UniqueTypeNamesAcrossNamespaces = true, }; var xsdFiles = new[] { diff --git a/XmlSchemaClassGenerator/CodeUtilities.cs b/XmlSchemaClassGenerator/CodeUtilities.cs index 768d50c7..570568da 100644 --- a/XmlSchemaClassGenerator/CodeUtilities.cs +++ b/XmlSchemaClassGenerator/CodeUtilities.cs @@ -14,12 +14,12 @@ namespace XmlSchemaClassGenerator { public static class CodeUtilities { - private static readonly Regex invalidCharsRgx = new Regex("[^_a-zA-Z0-9]"); - private static readonly Regex whiteSpace = new Regex(@"(?<=\s)"); - private static readonly Regex startsWithLowerCaseChar = new Regex("^[a-z]"); - private static readonly Regex firstCharFollowedByUpperCasesOnly = new Regex("(?<=[A-Z])[A-Z0-9]+$"); - private static readonly Regex lowerCaseNextToNumber = new Regex("(?<=[0-9])[a-z]"); - private static readonly Regex upperCaseInside = new Regex("(?<=[A-Z])[A-Z]+?((?=[A-Z][a-z])|(?=[0-9]))"); + private static readonly Regex invalidCharsRgx = new("[^_a-zA-Z0-9]"); + private static readonly Regex whiteSpace = new(@"(?<=\s)"); + private static readonly Regex startsWithLowerCaseChar = new("^[a-z]"); + private static readonly Regex firstCharFollowedByUpperCasesOnly = new("(?<=[A-Z])[A-Z0-9]+$"); + private static readonly Regex lowerCaseNextToNumber = new("(?<=[0-9])[a-z]"); + private static readonly Regex upperCaseInside = new("(?<=[A-Z])[A-Z]+?((?=[A-Z][a-z])|(?=[0-9]))"); // Credits: chviLadislav // https://stackoverflow.com/questions/18627112/how-can-i-convert-text-to-pascal-case diff --git a/XmlSchemaClassGenerator/TypeModel.cs b/XmlSchemaClassGenerator/TypeModel.cs index a33b26f8..7702d82d 100644 --- a/XmlSchemaClassGenerator/TypeModel.cs +++ b/XmlSchemaClassGenerator/TypeModel.cs @@ -92,11 +92,16 @@ public virtual CodeTypeDeclaration Generate() protected void GenerateTypeAttribute(CodeTypeDeclaration typeDeclaration) { - if (XmlSchemaName == null || IsRedefined) return; + var xmlSchemaName = XmlSchemaName; + + if (xmlSchemaName == null && RootElementName != null && typeDeclaration.Name != RootElementName.Name) + xmlSchemaName = RootElementName; + + if (xmlSchemaName == null || IsRedefined) return; var typeAttribute = AttributeDecl( - new(new CodePrimitiveExpression(XmlSchemaName.Name)), - new(nameof(XmlRootAttribute.Namespace), new CodePrimitiveExpression(XmlSchemaName.Namespace))); + new(new CodePrimitiveExpression(xmlSchemaName.Name)), + new(nameof(XmlRootAttribute.Namespace), new CodePrimitiveExpression(xmlSchemaName.Namespace))); // don't generate AnonymousType if it's derived class, otherwise XmlSerializer will // complain with "InvalidOperationException: Cannot include anonymous type '...'"