Solved

How to deserialize the values types when they are empty

Posted on 2008-10-20
5
597 Views
Last Modified: 2013-12-17
I have simple xml file and class for that, while deserilizing the  if the xmlelement of type (int) is empty i am having problem. If I have values in the xml file it is working with no issues.
using System;

using System.Collections.Generic;

using System.Text;

using System.Xml;

using System.Xml.Serialization;

 

namespace ConsoleApplication1

{

    [Serializable]

    public class Student

    {

        private int no;

        private string name;

 

        public int No

        {

            get { return no; }

            set { no = value; }

        }

 

        [XmlElement(IsNullable=true)]

        public string Name

        {

            get { return name; }

            set { name = value; }

        }

 

    }

}

 

<?xml version="1.0" encoding="utf-8" ?>

<Student>

	<No></No>

	<Name>Test</Name>

</Student>

Open in new window

0
Comment
Question by:tryokane
  • 3
  • 2
5 Comments
 
LVL 15

Assisted Solution

by:angus_young_acdc
angus_young_acdc earned 100 total points
ID: 22756239
Its because you cant have type int etc as a null.  If you want that you have to explicitly say it can be set as a value of type null by using "?"  Example is in the code snippet.  That will say that the integer value can be null
    [Serializable]

    public class Student

    {

        private int? no;

        private string name;
 

        public int? No

        {

            get { return no; }

            set { no = value; }

        }
 

        [XmlElement(IsNullable = true)]

        public string Name

        {

            get { return name; }

            set { name = value; }

        }

Open in new window

0
 
LVL 2

Author Comment

by:tryokane
ID: 22763828
Can we do the same way for datetime and decimal types also?
0
 
LVL 2

Author Comment

by:tryokane
ID: 22763940
I tried the above way but its not working.I am getting a message like "There was an error in the xml message".
0
 
LVL 15

Expert Comment

by:angus_young_acdc
ID: 22766928
Where exactly are you getting the error (what code is producing it)?  As I would be just guessing without knowing more.
0
 
LVL 2

Accepted Solution

by:
tryokane earned 0 total points
ID: 22865631
Ok,I was able to find a solution for the above problem.The below way is the method to solve this for any type of data.Thanks for all the solutions and help offered!
 [XmlIgnore]

        public decimal ManualOverridePrice

        {

            get { return m_ManualOverridePrice; }

            set { m_ManualOverridePrice = value; }

        }
 

        [XmlElement(ElementName = "ManualOverridePrice", IsNullable = true)]

        public string ManualOverridePriceHandler

        {

            get { return m_ManualOverridePrice.ToString(); }

            set { if (value != null && value != string.Empty) m_ManualOverridePrice = XmlConvert.ToDecimal(value); }

        }

Open in new window

0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Summary Displaying images in RichTextBox is a common requirement with limited solutions available. Pasting through clipboard or embedding into RTF content only support static images.  This article describes how to insert Windows control objects int…
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
This is a video that shows how the OnPage alerts system integrates into ConnectWise, how a trigger is set, how a page is sent via the trigger, and how the SENT, DELIVERED, READ & REPLIED receipts get entered into the internal tab of the ConnectWise …
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

914 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now