1

将使用我的 wcf Web 服务的那个有 2 个请求:他希望从服务返回的对象反序列化 xml 的第一个元素中的另一个属性。他希望修改该 xml 元素的现有属性。

按顺序,这是反序列化:

ServiceReference1.MyClient c = new ServiceReference1.MyClient();

ServiceReference1.MyRequest req = new ServiceReference1.MyRequest();

// setting the request

// richiedo la lista - prezzi
ServiceReference1.MyResponse res = c.GetPricesWithTecdocFormat(req);

// serializzation
string OutputPath = this.Request.PhysicalApplicationPath;
System.Runtime.Serialization.DataContractSerializer x = new System.Runtime.Serialization.DataContractSerializer(res.GetType());
using (FileStream fs = new FileStream(OutputPath + "MyResponse.xml", FileMode.Create))
{
    x.WriteObject(fs, res);
}

生成的 XML 文件开头如下:

<?xml version="1.0"?>
 <MyResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
   ...

要求是这样的:

<?xml version="1.0"?>
 <MyResponse xsi:noNamespaceSchemaLocation="genericResponse.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

然后...

  • xmlns:i 必须是 xmlns:xsi

  • 在元素中存在引用 .xsd 文件的属性

我用 MessageInspector 试了又试,但没有结果——这让我发疯了......

我能怎么做?

皮莱吉

4

1 回答 1

1

您将很难使用DataContractSerializer. 如果您切换到 using XmlSerializer,您可以更好地控制序列化过程。

然后你需要做两件事:

  1. 使用该XmlSerializerNamespaces类型来操作命名空间前缀,如此处所述
  2. 使用XmlAttributeOverrides类型将noNamespaceSchemaLocation属性添加到根节点。
于 2012-09-05T08:59:08.697 回答