z:在WCF消息日志中Id =“”。反序列化时,DataContractSerializer会引发异常

时间:2010-12-10 16:59:47

标签: .net wcf datacontractserializer

我正在尝试使用DataContractSerializer从捕获的WCF消息日志(svclog)反序列化消息。

尝试调用dataContractSerializer.ReadObject()

时,某些对象会抛出异常

抛出的异常是:“无效的ID''。不能为空或空”

在进一步调查中,我在svclog中找到了有问题的对象。

<personHeader xmlns:d4p1="http://schemas.datacontract.org/2004/07/Contosso.BusinessObjects"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance" z:Id="" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<EntityKey xmlns:d5p1="http://schemas.datacontract.org/2004/07/System.Data" i:nil="true"
xmlns="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses"></EntityKey>
<UId xmlns="http://schemas.datacontract.org/2004/07/Contosso.BusinessObjects">F62C446B-C74E-4272-8338-7AF3D2957AC6</UId>
<d4p1:CustomerType>ABC</d4p1:CustomerType>
<d4p1:Screen>ConfigurePeople</d4p1:Screen>
<d4p1:ShowAllDisplayToPublic>true</d4p1:ShowAllDisplayToPublic>i1</personHeader>

真正的 问题可能是什么?如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

似乎ID属性/字段标记为必需,并且上面的Id的xml值为null / empty(z:Id =“”)。

解决方法

  1. 如果您只想在xml上面反序列化,请为id
  2. 添加一些虚拟值
  3. 修改dataconract定义,以便不将ID字段标记为必需,即IsRequired =“false”。
  4. ... HTH