C# 自定义xsd.exe工具和区分大小写的xml序列化

C# 自定义xsd.exe工具和区分大小写的xml序列化,c#,xml-serialization,xsd.exe,fpml,C#,Xml Serialization,Xsd.exe,Fpml,我有以下xsd: <?xml version="1.0" encoding="UTF-8"?> <xsd:schema targetNamespace="http://www.something.com/GetWrapRequest" elementFormDefault="qualified" attributeFormDefault="qualified" version="1.0" xmlns:xsd="http://www

我有以下xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
        targetNamespace="http://www.something.com/GetWrapRequest"
        elementFormDefault="qualified" attributeFormDefault="qualified" version="1.0"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:gwreq="http://www.something.com/GetWrapRequest">

    <xsd:element name="message" type="gwreq:Message">
        <xsd:annotation>
            <xsd:documentation>Complete message</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:complexType name="Message">
        <!-- something here -->
    </xsd:complexType>
</xsd:schema>
我的代码正在生成:

[System.Xml.Serialization.XmlRootAttribute("message", Namespace="http://www.something.com/GetWrapRequest", IsNullable=true)]
public partial class Message {}
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.something.com/GetWrapRequest", IsNullable=true)]
public partial class Message {}
如您所见,属性中缺少带有较低“m”的“message”。而且,因为我需要反序列化的xml也带有标记“message”,低“m”反序列化失败


我怎样才能解决这个问题?我查看了XmlSchemaImporter和XmlCodeExporter的选项,但没有任何东西可以做到这一点。或者我可以通过某种方式设置XmlSerializer来禁用区分大小写吗?

因此,在潜入XSD2代码源代码后,我发现了一件有趣的事情。我使用这两个循环来创建xml映射

foreach (XmlSchemaType schemaType in rootSchema.SchemaTypes.Values)
    xmlTypeMappings.Add(xmlSchemaImporter.ImportSchemaType(schemaType.QualifiedName));
foreach (XmlSchemaElement schemaElement in rootSchema.Elements.Values)
    xmlTypeMappings.Add(xmlSchemaImporter.ImportTypeMapping(schemaElement.QualifiedName));
但是在XSD2代码中,它们首先处理元素,然后处理模式类型。我只是把这些循环的顺序改成如下:

foreach (XmlSchemaElement schemaElement in rootSchema.Elements.Values)
    xmlTypeMappings.Add(xmlSchemaImporter.ImportTypeMapping(schemaElement.QualifiedName))
foreach (XmlSchemaType schemaType in rootSchema.SchemaTypes.Values)
    xmlTypeMappings.Add(xmlSchemaImporter.ImportSchemaType(schemaType.QualifiedName));

并且生成了元素名为“message”的正确XmlRootAttribute。

因此,在潜入Xsd2Code源代码后,我发现了一件有趣的事情。我使用这两个循环来创建xml映射

foreach (XmlSchemaType schemaType in rootSchema.SchemaTypes.Values)
    xmlTypeMappings.Add(xmlSchemaImporter.ImportSchemaType(schemaType.QualifiedName));
foreach (XmlSchemaElement schemaElement in rootSchema.Elements.Values)
    xmlTypeMappings.Add(xmlSchemaImporter.ImportTypeMapping(schemaElement.QualifiedName));
但是在XSD2代码中,它们首先处理元素,然后处理模式类型。我只是把这些循环的顺序改成如下:

foreach (XmlSchemaElement schemaElement in rootSchema.Elements.Values)
    xmlTypeMappings.Add(xmlSchemaImporter.ImportTypeMapping(schemaElement.QualifiedName))
foreach (XmlSchemaType schemaType in rootSchema.SchemaTypes.Values)
    xmlTypeMappings.Add(xmlSchemaImporter.ImportSchemaType(schemaType.QualifiedName));
并生成元素名为“message”的适当XmlRootAttribute