2010-12-10 49 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

相關問題