z: Id = "" в журнале сообщений WCF. DataContractSerializer выдает исключение при десериализации - PullRequest
1 голос
/ 10 декабря 2010

Я пытаюсь десериализовать сообщения из захваченного журнала сообщений WCF (svclog) с помощью DataContractSerializer.

Некоторые объекты выдают исключение при попытке вызвать dataContractSerializer.ReadObject ()

Исключение: «Неверный идентификатор». Не должно быть пустым или пустым »

При дальнейшем исследовании я обнаружил проблемный объект в 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>

В чем может быть проблема real и как ее обойти?

1 Ответ

0 голосов
/ 11 декабря 2010

Кажется, что атрибут / поле идентификатора помечен как Обязательный, и в приведенном выше XML-значении Id равно null / empty (z: Id = "").

Обходной путь

  1. Если вы хотите десериализовать только над xml, добавьте фиктивное значение к id
  2. Измените определение dataconract так, чтобы оно не помечало поле идентификатора как обязательное, т.е. IsRequired = "false".

НТН ...

...