Quantcast
Viewing all articles
Browse latest Browse all 27408

You Wrote It! Why Can't You Read It? (Xml Serialization)

What started as a gentle little stroll in paths I don't usually walk has me entangled in briars! I cannot for the life of me work out why ...

vb.net Code:
  1. Public Class Form1
  2.     Dim dt As New DataTable("Stuff")
  3.  
  4.     Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  5.         If Not IO.File.Exists("C:\dtable.xml") Then
  6.             dt.Columns.Add("Forename")
  7.             dt.Columns.Add("Surname")
  8.             dt.Rows.Add({"Esmeralda", "Finklepopper"})
  9.             dt.Rows.Add({"Algernon", "Strumple"})
  10.         Else
  11.             Dim sr As New IO.StreamReader("C:\dtable.xml")
  12.             Dim ds As New Xml.Serialization.XmlSerializer(dt.GetType)
  13.             dt = CType(ds.Deserialize(sr), DataTable)
  14.             sr.Close()
  15.         End If
  16.         DataGridView1.DataSource = dt
  17.     End Sub
  18.  
  19.     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  20.         Dim sw As New IO.StreamWriter("C:\dtable.xml")
  21.         Dim s As New Xml.Serialization.XmlSerializer(dt.GetType)
  22.         s.Serialize(sw, dt)
  23.         sw.Close()
  24.     End Sub
  25.  
  26. End Class

... which results in

Code Code:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DataTable>
  3.   <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  4.     <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Stuff" msdata:UseCurrentLocale="true">
  5.       <xs:complexType>
  6.         <xs:choice minOccurs="0" maxOccurs="unbounded">
  7.           <xs:element name="Stuff">
  8.             <xs:complexType>
  9.               <xs:sequence>
  10.                 <xs:element name="Forename" type="xs:string" minOccurs="0" />
  11.                 <xs:element name="Surname" type="xs:string" minOccurs="0" />
  12.               </xs:sequence>
  13.             </xs:complexType>
  14.           </xs:element>
  15.         </xs:choice>
  16.       </xs:complexType>
  17.     </xs:element>
  18.   </xs:schema>
  19.   <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
  20.     <DocumentElement>
  21.       <Stuff diffgr:id="Stuff1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
  22.         <Forename>Esmeralda</Forename>
  23.         <Surname>Finklepopper</Surname>
  24.       </Stuff>
  25.       <Stuff diffgr:id="Stuff2" msdata:rowOrder="1" diffgr:hasChanges="inserted">
  26.         <Forename>Algernon</Forename>
  27.         <Surname>Strumple</Surname>
  28.       </Stuff>
  29.     </DocumentElement>
  30.   </diffgr:diffgram>
  31. </DataTable>

Always gives me this ...

Quote:

There is an error in XML document (3, 4).
... on line 13 of the code above.

I have also tried using a Dataset including the table and serializing the Dataset with exactly the same result. How can there be an error in the XML if the XML was written by the same Serializer that's now reading it?

Viewing all articles
Browse latest Browse all 27408

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>