次の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>
また、C# クラスを生成するために、http://hosca.com/blog/post/2008/12/26/Generating-C-classes-from-FpML-Schema.aspx から変更されたコードを使用しています。通常の xsd.exe を使用できないためです。 XML 名前空間から C# 名前空間を作成する必要があり、xsd.exe はすべてのクラスを 1 つの C# 名前空間に配置しています。そこで、このコードを見つけて、正しい名前空間を作成するように拡張しました。ただし、xsd から CodeDom への変換に関連する部分はすべて同じです。
私の問題は、 xsd.exe がこれを生成していることです:
[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」の「メッセージ」が属性にありません。また、逆シリアル化する必要がある xml にはタグ「message」が付いているため、「m」の逆シリアル化は失敗します。
どうすればこれを解決できますか? XmlSchemaImporter と XmlCodeExporter のオプションを見ましたが、何もうまくいきません。または、大文字と小文字の区別を無効にするように XmlSerializer を設定できますか?