Я обнаружил, в чем проблема: XMLSerializer при сериализации свойств помещает их в XML, по-видимому, в случайном порядке (возможно, он следует некоторому порядку, который он получает от Datamodel edmx, я не исследовал это), поэтому я получил этот сценарий вXML, сгенерированный XMLSerializer:
<b:CHILD_Entity **z:Id="i1"** xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<b:CHILD_ID>008acd9a-2074-46b0-b73b-90b8c9123f6f</b:CHILD_ID>
<b:ReasonInfo>HRC->PLC 11</b:ReasonInfo>
<b:StartTime>2011-11-29T09:22:36.553</b:StartTime>
<b:EndTime>2011-11-29T10:31:58.507</b:EndTime>
<b:Quantity>0</b:Quantity>
<b:PARENT_Entity z:Id="i2">
<b:Description i:nil="true"></b:Description>
<b:UtilizationType>COMMITTED</b:UtilizationType>
<b:Reason>SETUP</b:Reason>
<b:ReasonInfo></b:ReasonInfo>
<b:CHILD_Entities>
<b:**CHILD_Entity** **z:Ref="i1"**></b:CHILD_Entity>
<b:**CHILD_Entity** **z:Id="i3"** xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<b:CHILD_ID>008acd9a-2074-46b0-b73b-90b8c9123f6f</b:CHILD_ID>
<b:ReasonInfo>HRC->PLC 11</b:ReasonInfo>
<b:StartTime>2011-11-29T09:22:36.553</b:StartTime>
**<b:ProductionCapabilityUtilization z:Ref="i2"></b:ProductionCapabilityUtilization>**
***<b:PARENT_ID>32864280-fe68-4b21-8375-b57ae8bbd7e6</b:PARENT_ID>***
..........
</b:CHILD_Entity>
..................
</b:CHILD_Entities>
**<b:PARENT_ID>32864280-fe68-4b21-8375-b57ae8bbd7e6</b:PARENT_ID>**
</b:PARENT_Entity>
***<b:PARENT_ID>32864280-fe68-4b21-8375-b57ae8bbd7e6</b:PARENT_ID>***
<b:PROP1>MLM</b:PROP1>
<b:PROP2>MLM1</b:PROP2>
<b:Reason>RUN</b:Reason>
</b:CHILD_Entity>
<b:**CHILD_Entity** **z:Ref="i3"** xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"></b:CHILD_Entity>
. Проблема в том, что иногда генерируемый FIXUP код пытается установить PARENTID для CHILD_Entity до того, как будет установлено PARENT_Entity.PARENT_ID и после того, как будет запущен SETTER CHILD_Entity.PARENT_Entity.таким образом, мы получили странный сценарий, в котором значение CHILD_Entity.PARENT имеет значение, но CHILD_Entity.Parent.PARENT_ID = NULL, поскольку DESERIALIZER все еще не обработал это свойство из XML
. Чтобы решить проблемы такого рода, мне пришлось изменить POCO.Шаблон таким образом:
Установите переменную счетчика int propertyPosCounter = 1;
Укажите ORDER при настройке DataMemberAttribute [DataMemberAttribute(Order = <#=propertyPosCounter.ToString()#>)]
Увеличение счетчика после этого propertyPosCounter +=1;
ПОВТОР Этот процесс для каждого Примитивных свойств - Комплексных свойств - Свойства навигации , чтобы мы всегда получали правильный порядок в сгенерированном XML для десериализации размера клиента с помощью POCO и его концепции исправления
После этой настройки для шаблона POCO.tt, который я решаютакого рода конфликты и проблем не возникает Сериализация -> Десериализация мои структуры данных передаются из моей службы WCF в мое клиентское приложение, в результате получается серия XMLlized is:
<b:CHILD_Entity z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<b:CHILD_ID>008acd9a-2074-46b0-b73b-90b8c9123f6f</b:CHILD_ID>
<b:PARENT_ID>32864280-fe68-4b21-8375-b57ae8bbd7e6</b:PARENT_ID>
<b:PROP1>MLM</b:PROP1>
<b:PROP2>MLM1</b:PROP2>
<b:Reason>RUN</b:Reason>
<b:ReasonInfo>HRC->PLC 11</b:ReasonInfo>
<b:StartTime>2011-11-29T09:22:36.553</b:StartTime>
<b:EndTime>2011-11-29T10:31:58.507</b:EndTime>
<b:Quantity>0</b:Quantity>
<b:PARENT_Entity z:Id="i2">
<b:PARENT_ID>32864280-fe68-4b21-8375-b57ae8bbd7e6</b:PARENT_ID>
<b:Description i:nil="true"></b:Description>
<b:UtilizationType>COMMITTED</b:UtilizationType>
<b:Reason>SETUP</b:Reason>
<b:ReasonInfo></b:ReasonInfo>
<b:CHILD_Entity>
<b:CHILD_Entity z:Ref="i1"></b:CHILD_Entity>
<b:**CHILD_Entity** **z:Id="i3"** xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<b:CHILD_ID>008acd9a-2074-46b0-b73b-90b8c9123f6f</b:CHILD_ID>
***<b:PARENT_ID>32864280-fe68-4b21-8375-b57ae8bbd7e6</b:PARENT_ID>***
<b:ReasonInfo>HRC->PLC 11</b:ReasonInfo>
<b:StartTime>2011-11-29T09:22:36.553</b:StartTime>
..........
**<b:ProductionCapabilityUtilization z:Ref="i2"></b:ProductionCapabilityUtilization>**
</b:CHILD_Entity>
</b:CHILD_Entity>
</b:PARENT_Entity>
</b:CHILD_Entity>
Я пытался быть настолько ясным, насколько это возможно, но сценарий не тривиален, поэтому, если кто-то нуждается в разъяснении, не стесняйтесь спрашивать его, я постараюсь ответить, как только смогу.
Надеюсь, что этот пост может помочь кому-то еще:)
С уважением, Луиджи Мартинес Бьянки