Deserialize XML to a DateTime

Hi everyone!

This is a hopefully easy question but I can't find much useful information on the Net.

I have an XML document that has this node:

<Date>7/18/1980</Date>

I have a C# program that calls XmlSerializer.Deseralize().  The class definition contains this:

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public DateTime Date;

So I want the Date XML node to resolve to a C# DateTime object.  But I get this when I run it:
System.FormatException: String was not recognized as a valid DateTime.


[FormatException: String was not recognized as a valid DateTime.]
   System.DateTime.ParseExact(String s, String[] formats, IFormatProvider provider, DateTimeStyles style) +106
   System.Xml.XmlConvert.ToDateTime(String s, String[] formats) +103
   System.Xml.Serialization.XmlCustomFormatter.ToDateTime(String value, String[] formats) +9
   System.Xml.Serialization.XmlCustomFormatter.ToDateTime(String value) +30
   System.Xml.Serialization.XmlSerializationReader.ToDateTime(String value) +5
   Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read6_KeyCiteHistoryDocument(Boolean isNullable, Boolean checkType) +867
   Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read1_KeyCiteHistory(Boolean isNullable, Boolean checkType) +606
   Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read10_KeyCiteHistory() +73

Is it possible to modify the attribute so it can parse the date in mm/dd/yyyy format?  If not, how must I structure my XML so it's valid?

Thanks in advance!
bignisAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
NipNFriar_TuckConnect With a Mentor Commented:
If you make your field private and your property public then the XML Serializer will use your property to answer you last statement.

From what I read on your code I think your issue may be in your formatting of the date, by default I believe that the XML Serializer uses dd/mm/yyyy and since there is no 18th month your date is invalid.

0
 
bruintjeCommented:
there is a post here that could help you in this case
source : http://tinyurl.com/48c4o

--------------------
One way to handle this is to decorate the DateTime member with
    [System.Xml.Serialization.XmlIgnore]

This tells the serializer to not serialize or de-serialize it at all.

Then, add an additional property to the class, called, for example DateString.  It might be defined as
    public string DateString {
      set { ... }
      get { ... }
    }

Then you can serialize and de-ser the DateString in the get/set  logic:

    public string DateString {
      set {
   // parse value here - de-ser from your chosen format
// use constructor, eg, Timestamp= new System.DateTime(....);
// or use one of the static Parse() overloads of System.DateTime()
      }
      get {
 return Timestamp.ToString("yyyy.MM.dd");  // serialize to whatever format
you want.
      }
    }

Within the get and set you are manipulating the value of the Date member, but you are doing it with custom logic.   The serialized property need not be a string of course, but that is a simple way to do it.     You could also ser/de-ser using an int, as with the unix epoch, for example

by Dino Chiesa
--------------------

HTHAB
0
 
bignisAuthor Commented:
I'm unclear on the contents of your post.  In particular the line "// parse value here - de-ser from your chosen format".  Can you fill in the code for this part?  I can't see how I can deserialize automatically from within a property.
0
 
bignisAuthor Commented:
I'd like to give points to NipNFriar_Tuck.  His answer regarding dd/mm/yyyy format didn't answer my question per-se, but it provided me with the solution I needed.
0
 
cctestCommented:
hi bignis,
I got into the same situation as yours. Can you provide me with the solution?
Thanks
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.