2010-12-10 40 views
1

J'essaie de désérialiser les messages d'un journal des messages WCF capturés (svclog) à l'aide de DataContractSerializer.z: Id = "" dans le journal des messages WCF. DataContractSerializer renvoie une exception lors de la désérialisation

Certains objets jettent une exception lorsque vous essayez d'appeler dataContractSerializer.ReadObject()

L'exception levée est: «Id non valide « » ne doit pas être nul ou vide »

Le complément d'enquête, j'ai trouvé la objet problématique dans le 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> 

Ce qui pourrait être la question réelle et comment puis-je travailler autour d'elle?

Répondre

0

Il semble que l'attribut/champ ID soit marqué comme Obligatoire et que la valeur xml ci-dessus de Id soit null/vide (z: Id = "").

Solution

  1. Si vous souhaitez désérialiser seulement au-dessus xml, ajouter un peu de valeur factice à id
  2. Modifier dataconract defination à ne pas marquer champ ID comme requis dire IsRequired = « false ».

HTH ...

+0

Merci pour votre réponse. Bien que la solution de contournement 1. n'ait pas fonctionné immédiatement, elle a fonctionné après avoir supprimé le texte interne "i1" juste avant la balise de fermeture "personHeader". J'ai déplacé "i1" dans l'attribut z: Id manuellement et il désérialise maintenant. – Chetan