Try this:

...

using System.IO;

...

TextReader reader = null;
XmlSerializer serializer = null;
AFRSServiceWS.AFRSSubmission Submission = null;

try
{
        serializer = new
XmlSerializer(typeof(AFRSServiceWS.SubmissionObj));
        reader = new StringReader(txtSubmission.Text.Trim());
        submission = (AFRSServiceWS.AFRSSubmission)
serializer.Deserialize(reader);
}
finally
{
        reader.Close();
}

...

I believe you may be experiencing an encoding issue, mind you I might be
completely incorrect :)

Regards,
Kristoffer Sheather.

-----Original Message-----
From: Unmoderated discussion of advanced .NET topics.
[mailto:[EMAIL PROTECTED] On Behalf Of Clark, Michael
(OFM)
Sent: Thursday, June 17, 2004 4:41 AM
To: [EMAIL PROTECTED]
Subject: [ADVANCED-DOTNET] Web Service Deserialization Problem


I have what seems to be a simple problem, but the explanation may be a
bit complex.  In summary, I get an exception deserializing xml to an
object when done in a windows application trying to build the object to
pass to a web service method, but the same code with the same xml works
fine inside the web service (i.e. when a web service method takes the
xml as a string and deserializes it to the target object).

The signature of the web service method in question looks like:

public ResponseObj SubmitData(SubmissionObj obj)

The Windows Application has a web reference to the web service, called
AFRSServiceWS.  The app takes a string in xml-format and attempts to
deserialize it to the SubmissionObj as follows:

=============Code Begins================= AFRSServiceWS.SubmissionObj
submission = new AFRSServiceWS.SubmissionObj();

try
        {
                XmlSerializer serializer = new
XmlSerializer(typeof(AFRSServiceWS.SubmissionObj));
                string sub = txtSubmission.Text;  // this is xml to
deserialize
                byte[] bytes = Encoding.ASCII.GetBytes(sub);
                MemoryStream stream = new MemoryStream(bytes);
                submission = (AFRSServiceWS.AFRSSubmission)
serializer.Deserialize(stream);
        }
        catch (Exception ex)
        {
                MessageBox.Show("Deserialization of submission failed
with "
+ ex.Message);
        }
===============Code Ends=============

The xml starts with:

<?xml version="1.0"?><AFRS_Submission
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";> ...

The exception I receive is always:

System.InvalidOperationException: There is an error in XML document (1,
23).
---> System.InvalidOperationException: <AFRS_Submission xmlns=''> was 
---> not
expected....

NOTE THAT THE EXACT SAME CODE WITH THE EXACT SAME XML DESERIALIZES
SUCCESSFULLY WITHIN THE WEB SERVICE ITSELF  (AN ALTERNATE WEB METHOD
TAKES THE XML AS A STRING AND DOES THE DESERIALIZATION).

The only difference in the code is that the alternate method uses the
SubmissionObj directly instead of having to reference it through the web
service as the windows app has to do.

Also note that if I supply a namespace in instancing the XmlSerializer,
such
as:

XmlSerializer serializer = new
XmlSerializer(typeof(AFRSServiceWS.SubmissionObj),"http://myurl.gov/afrs
serv
ice");

...and supply the same namespace in the xml, such as in:

<?xml version="1.0"?><AFRS_Submission
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xlmns="http://myurl.gov/afrsservice"; password=""> ...

it doesn't make the slightest difference in the outcome, except that it
names the namespace, as in:

System.InvalidOperationException: There is an error in XML document (1,
23).
---> System.InvalidOperationException: <AFRS_Submission
xmlns='http://myurl.gov/afrsservice'> was not expected....

I've tried numerous combinations to no avail, including leaving off the
xmlns:xsd and :xsi elements.

It seems like the critical difference between working and non-working
deserialization is doing so using an object defined on the web service.
And defining the identical object in the win app and trying to cast it
to the web service object doesn't work, either.

I have searched archives, msdn, and a number of other lists with no
luck.  I hope someone here can tell me what is going on, and what I can
do to fix this.

===================================
This list is hosted by DevelopMentor(r)  http://www.develop.com Some
.NET courses you may be interested in:

NEW! Guerrilla ASP.NET, 17 May 2004, in Los Angeles
http://www.develop.com/courses/gaspdotnetls

View archives and manage your subscription(s) at
http://discuss.develop.com

Notice:
The information contained in this e-mail message and any attached files may
be confidential information, and may also be the subject of legal
professional privilege.  If you are not the intended recipient any use,
disclosure or copying of this e-mail is unauthorised.  If you have received
this e-mail in error, please notify the sender immediately by reply e-mail
and delete all copies of this transmission together with any attachments.

===================================
This list is hosted by DevelopMentorŪ  http://www.develop.com
Some .NET courses you may be interested in:

NEW! Guerrilla ASP.NET, 17 May 2004, in Los Angeles
http://www.develop.com/courses/gaspdotnetls

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to