wcf - 无法使用 WCF web 服务的 XMLSerializer 结果反序列化

标签 wcf xml-deserialization

这是尝试从紧凑框架中获取 http 服务的代码。

    List<Table> tables;
    using (Stream r = response.GetResponseStream())
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Table),"http://schemas.datacontract.org/2004/07/");
        tables=(List<Table>) serializer.Deserialize(r);
    }

   response.Close();

它失败并显示 {"XML 文档中存在错误 (1, 2)。"}
{"<ArrayOfTable xmlns='http://schemas.datacontract.org/2004/07/WpfApplication1.Data.Model'> was not expected."}

表命名空间是一样的...
我不知道那里有什么问题...

更新

问题是我的 typeof(Table) 不是 typeof( List<Table> ) 部分工作..没有错误,但创建的表值为空!

最佳答案

XmlSerializer 构造函数上的第二个参数适用于序列化和反序列化。因此,第二个参数(命名空间)应该与接收到的参数相同。所以你最终会得到:

XmlSerializer serializer = new XmlSerializer(typeof(Table),"http://schemas.datacontract.org/2004/07/WpfApplication1.Data.Model")

请注意命名空间字符串末尾的“WpfApplication1.Data.Model”。

摆脱命名空间的一种方法。是在您的模型类(表)上指定它不应使用命名空间:
[DataContract(Namespace = "")]
public class Table { ... }

这样你就不需要为反序列化指定命名空间。

希望能帮助到你!

关于wcf - 无法使用 WCF web 服务的 XMLSerializer 结果反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7178687/

相关文章:

使用 iisexpress 传输安全和基本身份验证的 WCF 服务身份验证始终返回 401

协商媒体类型时 WCF REST 不返回 Vary 响应 header

c# - 期望来自命名空间 'CustomerLeads' 的元素 'http://www.w3.org/2001/XMLSchema-instance'

c# - 有没有办法使用 XmlSerializer 执行以下操作?

c# - 使用泛型 C# 反序列化动态 XML

VB/VBA 中的 XML 反序列化

WCF 服务检查客户端超时

c# - 让 DataContractSerializer 以两种不同的方式序列化同一个类?

c# - 通过 Azure 服务总线读取从 WCF 服务返回的流时出现 IOException 和 SocketException

php - 如果 XML 节点是值节点,则 simplexml_load_string 不会创建属性数组