私はこれは古い質問ですが、ここでは、将来の読者のために実現するには、私が発見したものです:彼らは、WSDLで動作するために定義されたスキーマを持っているIXmlSerializable
必要性を実装
オブジェクト、そうでない場合はネットフレームワークは、シリアル化がカスタムであるため契約を定義する方法を知らない。
スキーマを指定するには、IXmlSerializableインターフェイスでGetSchemaメソッドを使用するはずではなく、XmlSchemaProvider
属性(msdn link)を使用します。マイクロソフトの記事Enrich Your XML Serialization With Schema Providers In The .NET Frameworkのスキーマプロバイダーのセクションで詳しく読むことができます。
あなたはXmlSchemaProvider属性ページと記事の両方の例を見つけることができ、私はの.xsdファイルであなたのスキーマを格納し、例のようにそれらを読むことをお勧めします。コードを使ってスキーマを書くのは、せいぜい面倒です。私は、スキーマプロバイダーを実装したら期待通り
は、シリアル化が働いていました。 WCFサービスがIISでホストされている場合は、この質問を参照して適切なIISディレクトリを取得する方法を参照してください。Can I use reflection to find the bin/[Configuration] folder in ASP.NET instead of the asp temporary folder Microsoftの記事から
例:
[XmlRoot(ElementName="product_root", DataType="product_type",
Namespace="http://SchemaProvider.Example.org/Product.xsd",
IsNullable = false)]
[XmlSchemaProviderAttribute("GetSchemaFile")]
public class Product : IXmlSerializable
{
public static XmlSchemaComplexType GetSchemaFile(
System.Xml.Schema.XmlSchemaSet xs)
{
string xsdFile = Directory.GetCurrentDirectory() +
"\\Product.xsd";
XmlSerializer schemaSerializer =
new XmlSerializer(typeof(XmlSchema));
XmlSchema schema =
(XmlSchema)schemaSerializer.Deserialize(
XmlReader.Create(xsdFile));
xs.Add(schema);
// target namespace
string tns = "http://SchemaProvider.Example.org/Product.xsd";
XmlQualifiedName name =
new XmlQualifiedName("product_type", tns);
XmlSchemaComplexType productType =
(XmlSchemaComplexType) schema.SchemaTypes[name];
return productType;
}
...
}