2010-12-10 13 views
1

DataContractSerializerを使用して、キャプチャされたWCFメッセージログ(svclog)からメッセージを逆シリアル化しようとしています。z:Id = ""(WCFメッセージログ)。デシリアライズ時に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値がnull/empty(z:Id = "")であるようです。

回避策

  1. あなたはID
  2. にいくつかのダミーの値を追加し、XMLだけの上にデシリアライズしたい場合は必須すなわち=「false」をIsRequiredこのようIDフィールドをマークしないようにdataconract definationを変更します。

HTH ...

+0

はご回答いただきありがとうございます。回避策1.はすぐには機能しませんでしたが、閉じた "personH​​eader"タグの直前に内部テキスト "i1"を削除した後に機能しました。 "i1"をz:Id属性に手動で移動し、今度はそれをデシリアライズします。 – Chetan

関連する問題