这是尝试从紧凑框架中获取 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/