0

我开发 WCF 客户端。我的客户应该验证传入的消息。

其中一条消息具有以下结构:

<?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”字段的类型为“dateTime”,来自命名空间“ http://www.w3.org/2001/XMLSchema ”。

此响应在包含 XmlElement 数组的结构中反序列化。

但是我有一个问题:在消息被反序列化并且我收到了包含所有字段节点的相应变量之后,我无法确定前缀“xsd”的值,即如果我在回复和调用元素时采用与字段节点对应的 XMLElement 类型的任何元素。 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 回答