Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win


VB.NET Serialize Hashtable (nonbinary)

Posted on 2009-04-15
Medium Priority
Last Modified: 2013-11-08
I'm very new to VB. Only been using it for about a week. I've got about 9 years of Perl behind me so I can understand concepts perfectly, I just don't know the methods for VB or the 'lingo', be gentle lol.

I've got a basic hash setup something like key: blahblah, value: 8752.  I'm trying to figure out how to drop that out to human-readable .xml. (The data was originally .INI, if that helps at all) Keys are always strings, values are always integers, no chance of any duplicates, ever.

Any help is greatly appreciated as my friend's comment was waay out of my league, creating classes with properties and whatnot. Sounds like rolling my own form of a Hashtable.
Question by:Craz3d
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
LVL 48

Expert Comment

by:Wayne Taylor (webtubbs)
ID: 24155106
Depending on the flavour of XML you want, I have two options....
LVL 48

Expert Comment

by:Wayne Taylor (webtubbs)
ID: 24155109
Use the XmlSerializer object....
    Public Shared Function HashToXml(ByVal hash As Hashtable) As String
        Dim entries As New List(Of Entry)(hash.Count)
        For Each key As Object In hash.Keys
            entries.Add(New Entry(key, hash(key)))
        Dim sb As New Text.StringBuilder
        Dim writer As New System.IO.StringWriter(sb)
        Dim serializer As New XmlSerializer(GetType(List(Of Entry)))
        serializer.Serialize(writer, entries)
        Return sb.ToString
    End Function
    Public Class Entry
        Public Key As Object
        Public Value As Object
        Public Sub New()
            'nothing here
        End Sub
        Public Sub New(ByVal key As Object, ByVal value As Object)
            Me.Key = key
            Me.Value = value
        End Sub
    End Class

Open in new window

LVL 48

Accepted Solution

Wayne Taylor (webtubbs) earned 2000 total points
ID: 24155115
2) Create a DataSet, populate it with the HashTable data, then use the DataSet.WriteToXML method...
    Public Shared Function HashToXML(ByVal ht As Hashtable) As String
        Dim sb As New Text.StringBuilder
        Dim sr As New IO.StringWriter(sb)
        Dim ds As New DataSet("HashToXML")
        Dim dt As New DataTable("Item")
        For Each key As Object In ht.Keys
            dt.Rows.Add(New Object() {key.ToString, ht(key).ToString})
        Return sb.ToString
    End Function

Open in new window

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.


Author Comment

ID: 24155324
Tried both methods, the first was a bit more obfuscated than I'd like. The second didn't actually put out any newlines in the file but (unless I'm mistaken) I can just do that by hand, it's no biggy.

How might I pull them back into a hashtable?
LVL 48

Expert Comment

by:Wayne Taylor (webtubbs)
ID: 24155420
>>The second didn't actually put out any newlines in the file

In fairness, XML files are normally not meant for viewing directly, but if you do, use the default program designated for opening XML files (which is normally Internet Explorer, although any browser will do). Doing so will present the XML in an easy to read format - with line breaks.

To read the XML back to a HashTable, you can use this function....
    Public Function XMLtoHashTable(ByVal xmlStr As String) As Hashtable
        Dim hash As New Hashtable
        Dim sr As New IO.StringReader(xmlStr)
        Dim ds As New DataSet
        For Each dr As DataRow In ds.Tables("Item").Rows
            hash.Add(dr("Key"), dr("Value"))
        Return hash
    End Function

Open in new window


Author Comment

ID: 24155560
Thank you webtubbs.

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

This article describes relatively difficult and non-obvious issues that are likely to arise when creating COM class in Visual Studio and deploying it by professional MSI-authoring tools. It is assumed that the reader is already familiar with the cla…
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …
This lesson discusses how to use a Mainform + Subforms in Microsoft Access to find and enter data for payments on orders. The sample data comes from a custom shop that builds and sells movable storage structures that are delivered to your property. …

610 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