c# - XMLSerialization doesn't set properties on de-serialization -
i have weird behavior, don't know how diagnose.
some properties during de-serialization not set (null), though see them in (just-produced) xml document. xml document looks structured , symmetric regards similar types of objects.
it looks sets values point, stops setting values , beyond ignores other data.
just point out - last value sets correctly object of type contains object which, because of issues of singleton-like de-serialization, had implement ixmlserializable
. i'm pointing out since hint @ bug, although can't figure out be.
edit: read some articles retrieving serialization assembly , code. reason, outputs .dll , .pdb file, not .cs, articles mention
thanks
ok, solved! two-part solution:
1) enabling diagnostics
first, in visual studio 2012 (or perhaps more correctly in .net 4.5), it's not enough set following in app.config xmlserialization diagnostic:
<system.diagnostics> <switches> <add name="xmlserialization.compilation" value="1" /> </switches> </system.diagnostics> <system.xml.serialization> <xmlserializer tempfileslocation="c:\foo"/> </system.xml.serialization>
you need add attribute uselegacyserializergeneration="true"
produce auto-generated .cs file of serializer
<system.diagnostics> <switches> <add name="xmlserialization.compilation" value="1" /> </switches> </system.diagnostics> <system.xml.serialization> <xmlserializer tempfileslocation="c:\foo" uselegacyserializergeneration="true"/> </system.xml.serialization>
2) pitfall in ixmlserializable implementation
make sure xmlreader (when it's in readxml(xmlreader reader)
method of ixmlserializable
) on startelement of next element when you're done it, not on endelement. in other words, make sure call:
reader.readendelement();
because of it, xml deseralization reader got skewed data , read elements in wrong places, producing nulls.
Comments
Post a Comment