Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / Web Services / October 2006

Tip: Looking for answers? Try searching our database.

Null value node is causing deserialization problems

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
yads12@gmail.com - 10 Oct 2006 23:27 GMT
Let's say I have the following wsdl snipet:

     <s:complexType name="consumer_response_info">
       <s:sequence>
         <s:element minOccurs="0" maxOccurs="1" name="final_score"
type="tns:final_score" />
         <s:element minOccurs="0" maxOccurs="1" name="app_score"
type="tns:app_score" />
         <s:element minOccurs="0" maxOccurs="1" name="num_blank_chars"
type="tns:num_blank_chars" />
       </s:sequence>
     </s:complexType>
     <s:complexType name="final_score" mixed="true">
       <s:sequence>
         <s:any minOccurs="0" maxOccurs="1" />
       </s:sequence>
     </s:complexType>
     <s:complexType name="app_score" mixed="true">
       <s:sequence>
         <s:any minOccurs="0" maxOccurs="1" />
       </s:sequence>
     </s:complexType>
     <s:complexType name="num_blank_chars" mixed="true">
       <s:sequence>
         <s:any minOccurs="0" maxOccurs="1" />
       </s:sequence>
     </s:complexType>

Which generates the following class
   public partial class consumer_response_info {
       private System.Xml.XmlNode final_scoreField;
       private System.Xml.XmlNode app_scoreField;

       /// <remarks/>
       public System.Xml.XmlNode final_score {
           get {
               return this.final_scoreField;
           }
           set {
               this.final_scoreField = value;
           }
       }

       /// <remarks/>
       public System.Xml.XmlNode app_score {
           get {
               return this.app_scoreField;
           }
           set {
               this.app_scoreField = value;
           }
       }

       /// <remarks/>
       public System.Xml.XmlNode num_blank_chars {
           get {
               return this.num_blank_charsField;
           }
           set {
               this.num_blank_charsField = value;
           }
       }
   }

If the following xml is passed from the webservice:
<consumer_response_info>
  <final_score>998</final_score>
  <app_score>100</app_score>
  <num_blank_chars>0</num_blank_chars>
</consumer_response_info>

everything works fine and is deserialized properly.

If however the final_score element is null:
<consumer_response_info>
  <final_score />
  <app_score>100</app_score>
  <num_blank_chars>0</num_blank_chars>
</consumer_response_info>

The deserialization comes back with the object having app_score and
num_blank_chars values of null and the OuterXml value of final_score is
"<app_score>100</app_score>". So it seems to just ignore the null value
of final_score and populate the next node (in this case app_score) as
an element inside the final_score node. Incidently it also fails to
parse anymore of the document.

Furthermore, final_score, app_score, and num_blank_chars have their own
types (with the same name) on the server side, for some reason the
Visual Studio autogenerated classes mark them as type XmlNode. Not sure
if that's important or not.

Does anybody know why it's failing like this and any potential
solutions to the problem?
John Saunders - 11 Oct 2006 01:33 GMT
> Let's say I have the following wsdl snipet:
>
[quoted text clipped - 90 lines]
> Does anybody know why it's failing like this and any potential
> solutions to the problem?

xs:any is causing XmlNode.

I don't know if it's your null problem, but why have mixed="true" if you've
only got elements inside and no text?

John
yads12@gmail.com - 11 Oct 2006 16:07 GMT
> xs:any is causing XmlNode.
>
> I don't know if it's your null problem, but why have mixed="true" if you've
> only got elements inside and no text?
>
> John

This is the autogenerated wsdl file from the webservice that we
created. We do only have text inside the elements. Regardless why would
xmlnode deserialize the xml incorrectly?
John Saunders - 11 Oct 2006 18:36 GMT
>> xs:any is causing XmlNode.
>>
[quoted text clipped - 7 lines]
> created. We do only have text inside the elements. Regardless why would
> xmlnode deserialize the xml incorrectly?

I didn't say that it should do the wrong thing, only that mixed="true" might
be what was instigating it to do so.

You might try removing the mixed attribute just to see what happens...

John
yads12@gmail.com - 11 Oct 2006 19:56 GMT
I fixed the problem on the webservice end. Those classes all had an
Item property that was an XmlNode and had an XmlAnyElementAttribute. I
changed the XmlAnyElementAttribute to
XmlElementAttribute(IsNullable=true) and the deserialization now works
correctly.

> Let's say I have the following wsdl snipet:
>
[quoted text clipped - 90 lines]
> Does anybody know why it's failing like this and any potential
> solutions to the problem?

Rate this thread:







Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.