0

私はWCFクライアントを開発しています。私のクライアントは受信メッセージを検証する必要があります。

メッセージの 1 つは、次の構造を持っています。

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SOAP-ENV:Header>...</SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <OpDescriptionResponse>
      <Field Name="DateTime" Type="xsd:dateTime">
    </OpDescriptionResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

この場合、クライアントは検証する必要があります: フィールド "DateTime" は名前空間 " http://www.w3.org/2001/XMLSchema " からの型 "dateTime" を持っています。

この応答は、XmlElement の配列を含む構造体で逆シリアル化されます。

しかし、問題があります。メッセージが逆シリアル化され、すべての Field ノードを含む対応する変数を受け取った後、プレフィックス「xsd」の値を特定できません。 GetNamespaceOfPrefix("xsd") 結果として空の文字列を取得します。

逆シリアル化後にプレフィックスの定義を保存するにはどうすればよいですか?

この問題を克服するために私を助けてください。

4

1 に答える 1

0

名前空間/プレフィックスに影響を与えるには、XmlSerializerNamespaces を使用する必要があります。

次のコードは、大まかな参照を提供します。

XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add("prefixHere", "http://namespace.here/");
XmlSerializer tempSerializer = new XmlSerializer(messageObject.GetType());
tempSerializer.Serialize(Console.Out, messageObject, namespaces);  

よろしく、

于 2013-10-11T12:12:47.087 に答える