2010-12-10 81 views
1

我试图从使用DataContractSerializer捕获的WCF消息日志(svclog)反序列化消息。z:Id =“”。 DataContractSerializer在反序列化时抛出异常

一些对象抛出时尝试调用dataContractSerializer.ReadObject()

引发的异常是一个例外:“无效的ID‘’不能为null或空”

在进一步的调查,我发现了有问题的对象在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> 

可能是什么真正问题以及如何解决它?

回答

0

似乎ID属性/字段被标记为必需,并在Id的上述xml值为空/空(z:Id =“”)。

解决方法

  1. 如果您想反序列化只以上的XML,增加一些虚拟的价值ID
  2. 修改dataconract认定中不标记ID字段为必填即IsRequired =“假”。

HTH ...

+0

谢谢您的回应。尽管解决方法1不能立即生效,但在关闭“personH​​eader”标签之前删除内部文本“i1”后,它确实起作用。 我手动将“i1”移动到z:Id属性中,现在它反序列化正确。 – Chetan 2010-12-13 19:04:49

相关问题