XSDがあり、XSDから要素を受け取るWCF RESTエンドポイントを定義したいとします。XSDから生成されたコードがWCF RESTエンドポイントの有効なXMLを受け入れない
私は
は私が生成するXsd.exeではを使用する場合はここでは、次のスキーマ
<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="dir">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element ref="dir" />
<xs:element name="file">
<xs:complexType>
<xs:attribute name="id" type="xs:integer" />
<xs:attribute name="name" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:schema>
は、そのスキーマ
<dir name="root">
<dir name="foo">
<file id="12" name="ha" />
<file id="12" name="ha" />
</dir>
<dir name="bar" />
<file id="12" name="ha" />
<file id="12" name="ha" />
</dir
のためのいくつかの有効なXMLで考えてみてやっているものを説明しますスキーマのクラス私は上記のXMLを作成することができます。
dir foo = new dir{dir1 = new dir[2], name = "root", file = new dirFile[2]};
foo.file[0] = new dirFile{id = "12", name = "ha"};
foo.file[1] = new dirFile { id = "12", name = "ha" };
var file = new dirFile[2];
file[0] = new dirFile { id = "12", name = "ha" };
file[1] = new dirFile { id = "12", name = "ha" };
foo.dir1[0] = new dir { name = "foo", file = file};
foo.dir1[1] = new dir {name = "bar"};
XmlSerializer ser = new XmlSerializer(typeof(dir));
ser.Serialize(Console.Out, foo)
は今、私はそれがより大幅に異なっているXSD、有効なXMLを示し、そのサービスのヘルプページを見ればWCF REST XMLエンドポイント
[WebInvoke(UriTemplate = "doit"]
public void doit(dir data) { /* process it */ }
に入力としてそれを使用したいと言うことができます私がXSDで手動で定義したもの。私はそのサービスに、私が以前に生成されたXMLを投稿しようとすると、私は次のエラーを取得する
The exception message is 'Unable to deserialize XML body with root name 'dir' and root namespace ''
どのように私は私がXSDで定義されたXMLを受信するWebサービスを定義していますか?
EDIT:RESTヘルプページで生成されたXSDとXMLを示します。
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/Thomson.Quiz.Web.Services.Models" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/Thomson.Quiz.Web.Services.Models" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="dir">
<xs:sequence>
<xs:element name="dir1Field" nillable="true" type="tns:ArrayOfdir" />
<xs:element name="fileField" nillable="true" type="tns:ArrayOfdirFile" />
<xs:element name="nameField" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="dir" nillable="true" type="tns:dir" />
<xs:complexType name="ArrayOfdir">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="dir" nillable="true" type="tns:dir" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfdir" nillable="true" type="tns:ArrayOfdir" />
<xs:complexType name="ArrayOfdirFile">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="dirFile" nillable="true" type="tns:dirFile" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfdirFile" nillable="true" type="tns:ArrayOfdirFile" />
<xs:complexType name="dirFile">
<xs:sequence>
<xs:element name="idField" nillable="true" type="xs:string" />
<xs:element name="nameField" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="dirFile" nillable="true" type="tns:dirFile" />
</xs:schema>
そして、ここでの例のXML
<dir xmlns="http://schemas.datacontract.org/2004/07/Thomson.Quiz.Web.Services.Models">
<dir1Field>
<dir>
<dir1Field>
<dir>
<dir1Field i:nil="true" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" />
<fileField>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
</fileField>
<nameField>String content</nameField>
</dir>
<dir>
<dir1Field i:nil="true" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" />
<fileField>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
</fileField>
<nameField>String content</nameField>
</dir>
</dir1Field>
<fileField>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
</fileField>
<nameField>String content</nameField>
</dir>
<dir>
<dir1Field>
<dir>
<dir1Field i:nil="true" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" />
<fileField>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
</fileField>
<nameField>String content</nameField>
</dir>
<dir>
<dir1Field i:nil="true" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" />
<fileField>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
</fileField>
<nameField>String content</nameField>
</dir>
</dir1Field>
<fileField>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
</fileField>
<nameField>String content</nameField>
</dir>
</dir1Field>
<fileField>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
<dirFile>
<idField>String content</idField>
<nameField>String content</nameField>
</dirFile>
</fileField>
<nameField>String content</nameField>
</dir
結果の間違ったXMLを表示してください。 –
残りのヘルプページから間違って生成されたxml/xsdで更新されました –