Tag Archives: vb.net
VB.NET || How To Add & Use Custom Attributes To Class Properties Using VB.NET

The following is a module with functions which demonstrates how to add and use custom attributes for class properties using VB.NET.
The function demonstrated on this page is a generic extension method which uses reflection to get object property data transformed according to its custom attribute.
1. Custom Attribute
The example below demonstrates the use of ‘Utils.GetPropertyData‘ to get object property data transformed according to its custom attribute.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
' Custom Attribute Imports Utils ' Create custom attribute class Public Class DateFormatAttribute Inherits System.Attribute Public Property format As DateFormat End Class ' An enum to describe the custom attribute options Public Enum DateFormat [Default] ToLongDateString ToLongTimeString ToShortDateString ToShortTimeString End Enum ' Class that has a property that uses the custom attribute Public Class User <DateFormatAttribute(format:=DateFormat.ToShortDateString)> Public Property registered As Date Public Property name As String End Class ' Declare user Dim user = New User With { .name = "Kenneth", .registered = Date.Now } ' Get the properties with the processed attribute Dim result = user.GetPropertyData ' Display Info For Each prop In result Debug.Print($"Property: {prop.Key}, Value: {prop.Value}") Next ' expected output: ' Property: registered, Value: 11/25/2020 ' Property: name, Value: Kenneth |
2. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 25, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Namespace Global.Utils Public Module modUtils Public Class DateFormatAttribute Inherits System.Attribute Public Property format As DateFormat End Class Public Enum DateFormat [Default] ToLongDateString ToLongTimeString ToShortDateString ToShortTimeString End Enum ''' <summary> ''' Returns an objects property data with the data transformed ''' according to its attributes ''' </summary> ''' <returns>The objects property data</returns> <Runtime.CompilerServices.Extension()> Public Function GetPropertyData(Of T As {Class})(source As T) As Dictionary(Of String, Object) Dim result = New Dictionary(Of String, Object) Dim flags = System.Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.Public Dim properties = source.GetType.GetProperties(flags) For Each prop In properties Dim key = prop.Name Dim value = If(prop.CanRead, prop.GetValue(source _ , If(prop.GetIndexParameters.Count = 1, New Object() {Nothing}, Nothing)), Nothing) ' Get custom attributes for the property Dim customAttributes = Attribute.GetCustomAttributes(prop) For Each attribute In customAttributes If attribute.GetType.Equals(GetType(DateFormatAttribute)) Then Dim dateValue = CType(value, Date) Select Case CType(attribute, DateFormatAttribute).format Case DateFormat.ToLongDateString value = dateValue.ToLongDateString Case DateFormat.ToLongTimeString value = dateValue.ToLongTimeString Case DateFormat.ToShortDateString value = dateValue.ToShortDateString Case DateFormat.ToShortTimeString value = dateValue.ToShortTimeString Case Else value = dateValue.ToString End Select End If Next result.Add(key, value) Next Return result End Function End Module End Namespace ' http://programmingnotes.org/ |
3. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 25, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Imports Utils Public Module Program Public Class User <DateFormatAttribute(format:=DateFormat.ToShortDateString)> Public Property registered As Date Public Property name As String End Class Sub Main(args As String()) Try Dim user = New User With { .name = "Kenneth", .registered = Date.Now } ' Get the properties with the processed attribute Dim result = user.GetPropertyData For Each prop In result Display($"Property: {prop.Key}, Value: {prop.Value}") Next Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
VB.NET || How To Remove Excess Whitespace From A String Using VB.NET

The following is a module with functions which demonstrates how to remove excess whitespace from a string, replacing multiple spaces into just one using VB.NET.
1. Remove Excess Whitespace
The example below demonstrates the use of ‘Utils.ToSingleSpace‘ to remove excess whitespace from a string.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
' Remove Excess Whitespace Imports Utils Dim word = " This document uses 3 other documents " ' Creates single space string Dim result = word.ToSingleSpace Debug.Print(result) ' expected output: ' This document uses 3 other documents |
2. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 24, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Namespace Global.Utils Public Module modUtils ''' <summary> ''' Removes excess whitespace from a string ''' </summary> ''' <param name="source">The source string</param> ''' <returns>The modified source string</returns> <Runtime.CompilerServices.Extension()> Public Function ToSingleSpace(source As String) As String Dim pattern = "\s\s+" Dim result = System.Text.RegularExpressions.Regex.Replace(source, pattern, " ").Trim Return result End Function End Module End Namespace ' http://programmingnotes.org/ |
3. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 24, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Imports Utils Public Module Program Sub Main(args As String()) Try Dim word = " This document uses 3 other documents " ' Creates single space string Dim result = word.ToSingleSpace Display(result) Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
VB.NET || How To Remove All Whitespace From A String Using VB.NET

The following is a module with functions which demonstrates how to remove all whitespace from a string using VB.NET.
1. Remove All Whitespace
The example below demonstrates the use of ‘Utils.RemoveWhitespace‘ to remove all whitespace from a string.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
' Remove All Whitespace Imports Utils Dim word = " This document uses 3 other documents " ' Remove whitespace from the string Dim result = word.RemoveWhitespace Debug.Print(result) ' expected output: ' Thisdocumentuses3otherdocuments |
2. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 24, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Namespace Global.Utils Public Module modUtils ''' <summary> ''' Removes all whitespace from a string ''' </summary> ''' <param name="source">The source string</param> ''' <returns>The modified source string</returns> <Runtime.CompilerServices.Extension()> Public Function RemoveWhitespace(source As String) As String Dim pattern = "\s" Dim result = System.Text.RegularExpressions.Regex.Replace(source, pattern, String.Empty) Return result End Function End Module End Namespace ' http://programmingnotes.org/ |
3. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 24, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Imports Utils Module Program Sub Main(args As String()) Try Dim word = "This document uses 3 other documents " ' Remove whitespace from the string Dim result = word.RemoveWhitespace Display(result) Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
VB.NET || How To Remove Non Alphanumeric Characters From A String Using VB.NET

The following is a module with functions which demonstrates how to remove and replace non alphanumeric characters from a string using VB.NET.
1. Alphanumeric Characters
The example below demonstrates the use of ‘Utils.ToAlphaNumeric‘ to create an alphanumeric string.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
' Alphanumeric Characters Imports Utils Dim word = "This-document_uses-3#other@documents!!!" ' Create alpha numeric string Dim result = word.ToAlphaNumeric Debug.Print(result) ' expected output: ' This document uses 3 other documents |
2. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 24, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Namespace Global.Utils Public Module modUtils ''' <summary> ''' Returns the string as alphanumeric ''' </summary> ''' <param name="source">The source string</param> ''' <param name="replacement">The string replacement for invalid characters</param> ''' <returns>The modified source string</returns> <Runtime.CompilerServices.Extension()> Public Function ToAlphaNumeric(source As String, Optional replacement As String = " ") As String Dim pattern = "[^a-zA-Z0-9]+" Dim result = System.Text.RegularExpressions.Regex.Replace(source, pattern, replacement).Trim Return result End Function End Module End Namespace ' http://programmingnotes.org/ |
3. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 24, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Imports Utils Module Program Sub Main(args As String()) Try Dim word = "This-document_uses-3#other@documents!!!" ' Create alpha numeric string Dim result = word.ToAlphaNumeric Display(result) Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
VB.NET || How To Replace Entire Words In A String Using VB.NET

The following is a module with functions which demonstrates how to replace entire words in a string using VB.NET.
This function is different from String.Replace in that instead of replacing all substring instances in a word, it replaces all instances of matching entire words in a string.
1. Replace Entire Word
The example below demonstrates the use of ‘Utils.ReplaceWord‘ to replace an entire word.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
' Replace Entire Word Imports Utils Dim word = "This docment uses 3 other docments to docment the docmentation" ' Replace the entire word in the string Dim result = word.ReplaceWord("docment", "document") Debug.Print(result) ' expected output: ' This document uses 3 other docments to document the docmentation |
2. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 24, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Namespace Global.Utils Public Module modUtils ''' <summary> ''' Replaces the entire word in the string ''' </summary> ''' <param name="source">The source string</param> ''' <param name="wordToReplace">The word to replace</param> ''' <param name="replacementWord">The replacement word</param> ''' <param name="regexOptions">The search options</param> ''' <returns>The modified source string</returns> <Runtime.CompilerServices.Extension()> Public Function ReplaceWord(source As String, wordToReplace As String, replacementWord As String _ , Optional regexOptions As System.Text.RegularExpressions.RegexOptions = System.Text.RegularExpressions.RegexOptions.None) As String Dim pattern = $"\b{System.Text.RegularExpressions.Regex.Escape(wordToReplace)}\b" Dim result = System.Text.RegularExpressions.Regex.Replace(source, pattern, replacementWord, regexOptions) Return result End Function End Module End Namespace ' http://programmingnotes.org/ |
3. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 24, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Imports Utils Module Program Sub Main(args As String()) Try Dim word = "This docment uses 3 other docments to docment the docmentation" ' Replace the entire word in the string Dim result = word.ReplaceWord("docment", "document") Display(result) Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
VB.NET || How To Manually Copy Two Streams From One To Another Using VB.NET

The following is a module with functions which demonstrates how to manually copy two steams from one to another using VB.NET.
1. Manually Copy Stream
The example below demonstrates the use of ‘Utils.CopyStream‘ to copy two streams.
1 2 3 4 5 6 7 |
' Manually Copy Stream Dim stream1 As System.IO.Stream Dim stream2 As System.IO.Stream ' Copy stream1 to stream2 Utils.CopyStream(stream1, stream2) |
2. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 24, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Namespace Global.Utils Public Module modUtils ''' <summary> ''' Reads bytes from the 'streamFrom' and writes them to 'streamTo' ''' </summary> ''' <param name="streamFrom">The source stream</param> ''' <param name="streamTo">The destination stram</param> ''' <returns>The total bytes written</returns> <Runtime.CompilerServices.Extension()> Public Function CopyStream(streamFrom As System.IO.Stream, streamTo As System.IO.Stream, Optional bufferSize As Integer = 4096) As Integer Dim bytesWritten As Integer = 0 Dim bytBuffer(bufferSize - 1) As Byte Dim bytesRead As Integer = 0 Dim tempPos = If(streamFrom.CanSeek, CType(streamFrom.Position, Integer?), Nothing) If streamFrom.CanSeek Then streamFrom.Position = 0 Do bytesRead = streamFrom.Read(bytBuffer, 0, bytBuffer.Length) If bytesRead > 0 Then streamTo.Write(bytBuffer, 0, bytesRead) bytesWritten += bytesRead End If Loop While bytesRead > 0 If tempPos.HasValue Then streamFrom.Position = tempPos.Value Return bytesWritten End Function End Module End Namespace ' http://programmingnotes.org/ |
3. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 24, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Module Program Sub Main(args As String()) Try Dim stream1 As System.IO.Stream Dim stream2 As System.IO.Stream ' Copy stream1 to stream2 Utils.CopyStream(stream1, stream2) Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
VB.NET || How To Copy All Properties & Fields From One Object To Another Using VB.NET

The following is a module with functions which demonstrates how to copy all properties and fields from one object to another using VB.NET.
The function demonstrated on this page is a generic extension method which uses reflection to copy all the matching properties and fields from one object to another.
This function works on both structure and class object fields and properties.
The two objects do not have to be the same type. Only the matching properties and fields are copied.
1. Copy Properties & Fields
The example below demonstrates the use of ‘Utils.Objects.CopyPropsTo‘ to copy all the matching properties and fields from the source object to the destination object.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
' Copy Properties & Fields Imports Utils.Objects Public Class Part Public Property PartName As String Public Property PartId As Integer End Class Public Structure Part2 Public Property PartName As String Public PartId As Integer End Structure ' Declare source object Dim part1 = New Part With { .PartName = "crank arm", .PartId = 1234 } ' Declare destination object Dim part2 = New Part2 ' Copy matching properties and fields to destination part1.CopyPropsTo(part2) ' Display information Debug.Print($"{part2.PartId} - {part2.PartName}") ' expected output: ' 1234 - crank arm |
2. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 22, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Namespace Global.Utils Namespace Objects Public Module modObjects ''' <summary> ''' Copies all the matching properties and fields from 'source' to 'destination' ''' </summary> ''' <param name="source">The source object to copy from</param> ''' <param name="destination">The destination object to copy to</param> <Runtime.CompilerServices.Extension()> Public Sub CopyPropsTo(Of T1, T2)(source As T1, ByRef destination As T2) Dim sourceMembers = GetMembers(source.GetType) Dim destinationMembers = GetMembers(destination.GetType) ' Copy data from source to destination For Each sourceMember In sourceMembers If Not CanRead(sourceMember) Then Continue For End If Dim destinationMember = destinationMembers.FirstOrDefault(Function(x) x.Name.ToLower = sourceMember.Name.ToLower) If destinationMember Is Nothing _ OrElse Not CanWrite(destinationMember) Then Continue For End If SetObjectValue(destination, destinationMember, GetMemberValue(source, sourceMember)) Next End Sub Private Sub SetObjectValue(Of T)(ByRef obj As T, member As System.Reflection.MemberInfo, value As Object) ' Boxing method used for modifying structures Dim boxed = If(obj.GetType.IsValueType, CType(obj, Object), obj) SetMemberValue(boxed, member, value) obj = CType(boxed, T) End Sub Private Sub SetMemberValue(Of T)(ByRef obj As T, member As System.Reflection.MemberInfo, value As Object) If IsProperty(member) Then Dim prop = CType(member, System.Reflection.PropertyInfo) If prop.SetMethod IsNot Nothing Then prop.SetValue(obj, value) End If ElseIf IsField(member) Then Dim field = CType(member, System.Reflection.FieldInfo) field.SetValue(obj, value) End If End Sub Private Function GetMemberValue(obj As Object, member As System.Reflection.MemberInfo) As Object Dim result As Object = Nothing If IsProperty(member) Then Dim prop = CType(member, System.Reflection.PropertyInfo) result = prop.GetValue(obj, If(prop.GetIndexParameters.Count = 1, New Object() {Nothing}, Nothing)) ElseIf IsField(member) Then Dim field = CType(member, System.Reflection.FieldInfo) result = field.GetValue(obj) End If Return result End Function Private Function CanWrite(member As System.Reflection.MemberInfo) As Boolean Return If(IsProperty(member), CType(member, System.Reflection.PropertyInfo).CanWrite, IsField(member)) End Function Private Function CanRead(member As System.Reflection.MemberInfo) As Boolean Return If(IsProperty(member), CType(member, System.Reflection.PropertyInfo).CanRead, IsField(member)) End Function Private Function IsProperty(member As System.Reflection.MemberInfo) As Boolean Return IsType(member.GetType, GetType(System.Reflection.PropertyInfo)) End Function Private Function IsField(member As System.Reflection.MemberInfo) As Boolean Return IsType(member.GetType, GetType(System.Reflection.FieldInfo)) End Function Private Function IsType(type As System.Type, targetType As System.Type) As Boolean Return type.Equals(targetType) OrElse type.IsSubclassOf(targetType) End Function Private Function GetMembers(type As System.Type) As List(Of System.Reflection.MemberInfo) Dim flags = System.Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.Public _ Or System.Reflection.BindingFlags.NonPublic Dim members = New List(Of System.Reflection.MemberInfo) members.AddRange(type.GetProperties(flags)) members.AddRange(type.GetFields(flags)) Return members End Function End Module End Namespace End Namespace ' http://programmingnotes.org/ |
3. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 22, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Imports Utils.Objects Module Program Public Class Part Public Property PartName As String Public PartId As Integer? End Class Public Structure Part2 Public Property PartName As String Public PartId As Integer End Structure Sub Main(args As String()) Try ' Declare source object Dim part1 = New Part With { .PartName = "crank arm", .PartId = 1234 } ' Declare destination object Dim part2 = New Part2 ' Copy matching properties and fields to destination part1.CopyPropsTo(part2) ' Display information Display($"{part2.PartId} - {part2.PartName}") Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
VB.NET || Universal Object Serializer and Deserializer Using VB.NET

The following is a module with functions which demonstrates how to create a simple universal object serializer and deserializer using VB.NET.
The following functions take in a instance of the abstract classes ‘ObjectSerializer‘, and ‘ObjectDeserializer‘. Those classes defines the functionality that is common to all the classes derived from it. They are what carries out the actual serialization and deserialization.
Breaking things up like so makes it easy to have different serializations with only calling one function.
Note: The functions in this module uses code from previous articles which explains how to serialize and deserialize objects.
For those examples of how to serialize and deserialize objects using Json and XML, see below:
1. JsonSerializer
The example below demonstrates the use of ‘Utils.Objects.JsonSerializer‘ to serialize an object to Json.
By changing the second parameter, calling the same function will change its behavior.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
' JsonSerializer Public Class Part Public Property PartName As String Public Property PartId As Integer End Class ' Declare list of objects Dim parts = New List(Of Part) From { New Part With { .PartName = "crank arm", .PartId = 1234 }, New Part With { .PartName = "chain ring", .PartId = 1334 }, New Part With { .PartName = "regular seat", .PartId = 1434 }, New Part With { .PartName = "banana seat", .PartId = 1444 }, New Part With { .PartName = "cassette", .PartId = 1534 }, New Part With { .PartName = "shift lever", .PartId = 1634 }} ' Serialize to json Dim serialized = Utils.Objects.Serialize(parts, New Utils.Objects.JsonSerializer) ' Display json Debug.Print(serialized) ' expected output: ' [ ' { ' "PartName": "crank arm", ' "PartId": 1234 ' }, ' { ' "PartName": "chain ring", ' "PartId": 1334 ' }, ' { ' "PartName": "regular seat", ' "PartId": 1434 ' }, ' { ' "PartName": "banana seat", ' "PartId": 1444 ' }, ' { ' "PartName": "cassette", ' "PartId": 1534 ' }, ' { ' "PartName": "shift lever", ' "PartId": 1634 ' } ' ] |
2. JsonDeserializer
The example below demonstrates the use of ‘Utils.Objects.JsonDeserializer‘ to deserialize an object from Json.
By changing the second parameter, calling the same function will change its behavior.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
' JsonDeserializer ' Declare Json array of objects Dim partsJson = " [ { ""PartName"": ""crank arm"", ""PartId"": 1234 }, { ""PartName"": ""chain ring"", ""PartId"": 1334 }, { ""PartName"": ""regular seat"", ""PartId"": 1434 }, { ""PartName"": ""banana seat"", ""PartId"": 1444 }, { ""PartName"": ""cassette"", ""PartId"": 1534 }, { ""PartName"": ""shift lever"", ""PartId"": 1634 } ] " ' Deserialize to object Dim deserialized = Utils.Objects.Deserialize(Of List(Of Part))(partsJson, New Utils.Objects.JsonDeserializer) ' Display the items For Each item In deserialized Debug.Print($"{item.PartId} - {item.PartName}") Next ' expected output: ' 1234 - crank arm ' 1334 - chain ring ' 1434 - regular seat ' 1444 - banana seat ' 1534 - cassette ' 1634 - shift lever |
3. XmlSerializer
The example below demonstrates the use of ‘Utils.Objects.XmlSerializer‘ to serialize an object to Xml.
By changing the second parameter, calling the same function will change its behavior.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
' XmlSerializer Public Class Part Public Property PartName As String Public Property PartId As Integer End Class ' Declare list of objects Dim parts = New List(Of Part) From { New Part With { .PartName = "crank arm", .PartId = 1234 }, New Part With { .PartName = "chain ring", .PartId = 1334 }, New Part With { .PartName = "regular seat", .PartId = 1434 }, New Part With { .PartName = "banana seat", .PartId = 1444 }, New Part With { .PartName = "cassette", .PartId = 1534 }, New Part With { .PartName = "shift lever", .PartId = 1634 }} ' Serialize to xml Dim serialized = Utils.Objects.Serialize(parts, New Utils.Objects.XmlSerializer) ' Display xml Debug.Print(serialized) ' expected output: ' <?xml version="1.0"?> ' <ArrayOfPart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> ' <Part> ' <PartName>crank arm</PartName> ' <PartId>1234</PartId> ' </Part> ' <Part> ' <PartName>chain ring</PartName> ' <PartId>1334</PartId> ' </Part> ' <Part> ' <PartName>regular seat</PartName> ' <PartId>1434</PartId> ' </Part> ' <Part> ' <PartName>banana seat</PartName> ' <PartId>1444</PartId> ' </Part> ' <Part> ' <PartName>cassette</PartName> ' <PartId>1534</PartId> ' </Part> ' <Part> ' <PartName>shift lever</PartName> ' <PartId>1634</PartId> ' </Part> ' </ArrayOfPart> |
4. XmlDeserializer
The example below demonstrates the use of ‘Utils.Objects.XmlDeserializer‘ to deserialize an object from xml.
By changing the second parameter, calling the same function will change its behavior.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
' XmlDeserializer ' Declare Xml array of objects Dim partsXml = $"<?xml version=""1.0""?> <ArrayOfPart xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> <Part> <PartName>crank arm</PartName> <PartId>1234</PartId> </Part> <Part> <PartName>chain ring</PartName> <PartId>1334</PartId> </Part> <Part> <PartName>regular seat</PartName> <PartId>1434</PartId> </Part> <Part> <PartName>banana seat</PartName> <PartId>1444</PartId> </Part> <Part> <PartName>cassette</PartName> <PartId>1534</PartId> </Part> <Part> <PartName>shift lever</PartName> <PartId>1634</PartId> </Part> </ArrayOfPart> " ' Deserialize to object Dim deserialized = Utils.Objects.Deserialize(Of List(Of Part))(partsXml, New Utils.Objects.XmlDeserializer) ' Display the items For Each item In deserialized Debug.Print($"{item.PartId} - {item.PartName}") Next ' expected output: ' 1234 - crank arm ' 1334 - chain ring ' 1434 - regular seat ' 1444 - banana seat ' 1534 - cassette ' 1634 - shift lever |
5. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 20, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Namespace Global.Utils Namespace Objects Public Module modObjects ''' <summary> ''' Serializes the specified value according to the ObjectSerializer ''' </summary> ''' <param name="value">The value to serialize</param> ''' <param name="serializer">Determines how the value should be serialized</param> ''' <returns>The value serialized according to the ObjectSerializer</returns> Public Function Serialize(Of T)(value As T, serializer As ObjectSerializer) As String Return serializer.Serialize(value) End Function ''' <summary> ''' Deserializes the specified value according to the ObjectDeserializer ''' </summary> ''' <param name="value">The value to deserialize</param> ''' <param name="deserializer">Determines how the value should be deserialized</param> ''' <returns>The value deserialized according to the ObjectSerializer</returns> Public Function Deserialize(Of T)(value As String, deserializer As ObjectDeserializer) As T Return deserializer.Deserialize(Of T)(value) End Function End Module #Region "ObjectSerializer" ''' <summary> ''' Defines the object serializer behavior ''' </summary> Public MustInherit Class ObjectSerializer Public MustOverride Function Serialize(Of T)(value As T) As String End Class Public Class JsonSerializer Inherits ObjectSerializer Public Property settings As New Newtonsoft.Json.JsonSerializerSettings Public Sub New() settings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore settings.Formatting = Newtonsoft.Json.Formatting.Indented End Sub Public Overrides Function Serialize(Of T)(value As T) As String Return Utils.Json.Serialize(value, settings) End Function End Class Public Class XmlSerializer Inherits ObjectSerializer Public Property root As New System.Xml.Serialization.XmlRootAttribute Public Overrides Function Serialize(Of T)(value As T) As String Return Utils.Xml.Serialize(value, root) End Function End Class #End Region #Region "ObjectDeserializer" ''' <summary> ''' Defines the object deserializer behavior ''' </summary> Public MustInherit Class ObjectDeserializer Public MustOverride Function Deserialize(Of T)(value As String) As T End Class Public Class JsonDeserializer Inherits ObjectDeserializer Public Property settings As New Newtonsoft.Json.JsonSerializerSettings Public Sub New() settings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore End Sub Public Overrides Function Deserialize(Of T)(value As String) As T Dim obj As T = Nothing If Not String.IsNullOrEmpty(value) Then obj = Utils.Json.Deserialize(Of T)(value, settings) End If Return obj End Function End Class Public Class XmlDeserializer Inherits ObjectDeserializer Public Property root As New System.Xml.Serialization.XmlRootAttribute Public Overrides Function Deserialize(Of T)(value As String) As T Dim obj As T = Nothing If Not String.IsNullOrEmpty(value) Then obj = Utils.Xml.Deserialize(Of T)(value, root) End If Return obj End Function End Class #End Region End Namespace End Namespace ' http://programmingnotes.org/ |
6. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 20, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Public Module Program Public Class Part Public Property PartName As String Public Property PartId As Integer End Class Sub Main(args As String()) Try ' Declare list of objects Dim parts = New List(Of Part) From { New Part With { .PartName = "crank arm", .PartId = 1234 }, New Part With { .PartName = "chain ring", .PartId = 1334 }, New Part With { .PartName = "regular seat", .PartId = 1434 }, New Part With { .PartName = "banana seat", .PartId = 1444 }, New Part With { .PartName = "cassette", .PartId = 1534 }, New Part With { .PartName = "shift lever", .PartId = 1634 }} ' Serialize to json Dim serialized = Utils.Objects.Serialize(parts, New Utils.Objects.JsonSerializer) ' Display json Display(serialized) ' Declare Json array of objects Dim partsJson = " [ { ""PartName"": ""crank arm"", ""PartId"": 1234 }, { ""PartName"": ""chain ring"", ""PartId"": 1334 }, { ""PartName"": ""regular seat"", ""PartId"": 1434 }, { ""PartName"": ""banana seat"", ""PartId"": 1444 }, { ""PartName"": ""cassette"", ""PartId"": 1534 }, { ""PartName"": ""shift lever"", ""PartId"": 1634 } ] " ' Deserialize to object Dim deserialized = Utils.Objects.Deserialize(Of List(Of Part))(partsJson, New Utils.Objects.JsonDeserializer) ' Display the items For Each item In deserialized Display($"{item.PartId} - {item.PartName}") Next ' Serialize to xml Dim serialized2 = Utils.Objects.Serialize(parts, New Utils.Objects.XmlSerializer) ' Display xml Display(serialized2) ' Declare Xml array of objects Dim partsXml = $"<?xml version=""1.0""?> <ArrayOfPart xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> <Part> <PartName>crank arm</PartName> <PartId>1234</PartId> </Part> <Part> <PartName>chain ring</PartName> <PartId>1334</PartId> </Part> <Part> <PartName>regular seat</PartName> <PartId>1434</PartId> </Part> <Part> <PartName>banana seat</PartName> <PartId>1444</PartId> </Part> <Part> <PartName>cassette</PartName> <PartId>1534</PartId> </Part> <Part> <PartName>shift lever</PartName> <PartId>1634</PartId> </Part> </ArrayOfPart> " ' Deserialize to object Dim deserialized2 = Utils.Objects.Deserialize(Of List(Of Part))(partsXml, New Utils.Objects.XmlDeserializer) ' Display the items For Each item In deserialized2 Display($"{item.PartId} - {item.PartName}") Next Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
VB.NET || How To Send, Post & Process A REST API Web Request Using VB.NET

The following is a module with functions which demonstrates how to send and receive a RESTful web request using VB.NET.
Contents
1. Overview
2. WebRequest - GET
3. WebRequest - POST
4. WebRequest - PUT
5. WebRequest - PATCH
6. WebRequest - DELETE
7. Utils Namespace
8. More Examples
1. Overview
The following functions use System.Net.HttpWebRequest and System.Net.HttpWebResponse to send and process requests. They can be called synchronously or asynchronously. This page will demonstrate using the asynchronous function calls.
The examples on this page will call a test API, and the resulting calls will return Json results.
The Json objects we are sending to the API are hard coded in the examples below. In a real world application, the objects would be serialized first before they are sent over the network, and then deserialized once a response is received. For simplicity, those operations are hard coded.
For examples of how to serialize and deserialize objects using Json and XML, see below:
Note: Don’t forget to include the ‘Utils Namespace‘ before running the examples!
2. WebRequest – GET
The example below demonstrates the use of ‘Utils.WebRequest.Get‘ to execute a GET request on the given url.
The optional function parameter allows you to specify System.Net.HttpWebRequest options, like the UserAgent, Headers etc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 |
' WebRequest - GET ' Declare url Dim url = "https://jsonplaceholder.typicode.com/users" ' Optional: Specify request options Dim options = New Utils.WebRequest.Options With { .UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0", .Headers = New System.Net.WebHeaderCollection From { {"key", "value"} } } ' Execute a get request at the following url Dim response = Await Utils.WebRequest.GetAsync(url) ' Display the status code and response body Debug.Print($" Status: {CInt(response.Result.StatusCode)} - {response.Result.StatusDescription} Bytes Received: {response.Bytes.Length} Body: {response.Body} ") ' .... Do something with response.Body like deserialize it to an object ' expected output: ' Status: 200 - OK ' Bytes Received: 5645 ' Body: [ ' { ' "id": 1, ' "name": "Leanne Graham", ' "username": "Bret", ' "email": "Sincere@april.biz", ' "address": { ' "street": "Kulas Light", ' "suite": "Apt. 556", ' "city": "Gwenborough", ' "zipcode": "92998-3874", ' "geo": { ' "lat": "-37.3159", ' "lng": "81.1496" ' } ' }, ' "phone": "1-770-736-8031 x56442", ' "website": "hildegard.org", ' "company": { ' "name": "Romaguera-Crona", ' "catchPhrase": "Multi-layered client-server neural-net", ' "bs": "harness real-time e-markets" ' } ' }, ' { ' "id": 2, ' "name": "Ervin Howell", ' "username": "Antonette", ' "email": "Shanna@melissa.tv", ' "address": { ' "street": "Victor Plains", ' "suite": "Suite 879", ' "city": "Wisokyburgh", ' "zipcode": "90566-7771", ' "geo": { ' "lat": "-43.9509", ' "lng": "-34.4618" ' } ' }, ' "phone": "010-692-6593 x09125", ' "website": "anastasia.net", ' "company": { ' "name": "Deckow-Crist", ' "catchPhrase": "Proactive didactic contingency", ' "bs": "synergize scalable supply-chains" ' } ' }, ' { ' "id": 3, ' "name": "Clementine Bauch", ' "username": "Samantha", ' "email": "Nathan@yesenia.net", ' "address": { ' "street": "Douglas Extension", ' "suite": "Suite 847", ' "city": "McKenziehaven", ' "zipcode": "59590-4157", ' "geo": { ' "lat": "-68.6102", ' "lng": "-47.0653" ' } ' }, ' "phone": "1-463-123-4447", ' "website": "ramiro.info", ' "company": { ' "name": "Romaguera-Jacobson", ' "catchPhrase": "Face to face bifurcated interface", ' "bs": "e-enable strategic applications" ' } ' }, ' { ' "id": 4, ' "name": "Patricia Lebsack", ' "username": "Karianne", ' "email": "Julianne.OConner@kory.org", ' "address": { ' "street": "Hoeger Mall", ' "suite": "Apt. 692", ' "city": "South Elvis", ' "zipcode": "53919-4257", ' "geo": { ' "lat": "29.4572", ' "lng": "-164.2990" ' } ' }, ' "phone": "493-170-9623 x156", ' "website": "kale.biz", ' "company": { ' "name": "Robel-Corkery", ' "catchPhrase": "Multi-tiered zero tolerance productivity", ' "bs": "transition cutting-edge web services" ' } ' }, ' { ' "id": 5, ' "name": "Chelsey Dietrich", ' "username": "Kamren", ' "email": "Lucio_Hettinger@annie.ca", ' "address": { ' "street": "Skiles Walks", ' "suite": "Suite 351", ' "city": "Roscoeview", ' "zipcode": "33263", ' "geo": { ' "lat": "-31.8129", ' "lng": "62.5342" ' } ' }, ' "phone": "(254)954-1289", ' "website": "demarco.info", ' "company": { ' "name": "Keebler LLC", ' "catchPhrase": "User-centric fault-tolerant solution", ' "bs": "revolutionize end-to-end systems" ' } ' }, ' { ' "id": 6, ' "name": "Mrs. Dennis Schulist", ' "username": "Leopoldo_Corkery", ' "email": "Karley_Dach@jasper.info", ' "address": { ' "street": "Norberto Crossing", ' "suite": "Apt. 950", ' "city": "South Christy", ' "zipcode": "23505-1337", ' "geo": { ' "lat": "-71.4197", ' "lng": "71.7478" ' } ' }, ' "phone": "1-477-935-8478 x6430", ' "website": "ola.org", ' "company": { ' "name": "Considine-Lockman", ' "catchPhrase": "Synchronised bottom-line interface", ' "bs": "e-enable innovative applications" ' } ' }, ' { ' "id": 7, ' "name": "Kurtis Weissnat", ' "username": "Elwyn.Skiles", ' "email": "Telly.Hoeger@billy.biz", ' "address": { ' "street": "Rex Trail", ' "suite": "Suite 280", ' "city": "Howemouth", ' "zipcode": "58804-1099", ' "geo": { ' "lat": "24.8918", ' "lng": "21.8984" ' } ' }, ' "phone": "210.067.6132", ' "website": "elvis.io", ' "company": { ' "name": "Johns Group", ' "catchPhrase": "Configurable multimedia task-force", ' "bs": "generate enterprise e-tailers" ' } ' }, ' { ' "id": 8, ' "name": "Nicholas Runolfsdottir V", ' "username": "Maxime_Nienow", ' "email": "Sherwood@rosamond.me", ' "address": { ' "street": "Ellsworth Summit", ' "suite": "Suite 729", ' "city": "Aliyaview", ' "zipcode": "45169", ' "geo": { ' "lat": "-14.3990", ' "lng": "-120.7677" ' } ' }, ' "phone": "586.493.6943 x140", ' "website": "jacynthe.com", ' "company": { ' "name": "Abernathy Group", ' "catchPhrase": "Implemented secondary concept", ' "bs": "e-enable extensible e-tailers" ' } ' }, ' { ' "id": 9, ' "name": "Glenna Reichert", ' "username": "Delphine", ' "email": "Chaim_McDermott@dana.io", ' "address": { ' "street": "Dayna Park", ' "suite": "Suite 449", ' "city": "Bartholomebury", ' "zipcode": "76495-3109", ' "geo": { ' "lat": "24.6463", ' "lng": "-168.8889" ' } ' }, ' "phone": "(775)976-6794 x41206", ' "website": "conrad.com", ' "company": { ' "name": "Yost and Sons", ' "catchPhrase": "Switchable contextually-based project", ' "bs": "aggregate real-time technologies" ' } ' }, ' { ' "id": 10, ' "name": "Clementina DuBuque", ' "username": "Moriah.Stanton", ' "email": "Rey.Padberg@karina.biz", ' "address": { ' "street": "Kattie Turnpike", ' "suite": "Suite 198", ' "city": "Lebsackbury", ' "zipcode": "31428-2261", ' "geo": { ' "lat": "-38.2386", ' "lng": "57.2232" ' } ' }, ' "phone": "024-648-3804", ' "website": "ambrose.net", ' "company": { ' "name": "Hoeger LLC", ' "catchPhrase": "Centralized empowering task-force", ' "bs": "target end-to-end models" ' } ' } ' ] |
3. WebRequest – POST
The example below demonstrates the use of ‘Utils.WebRequest.Post‘ to execute a POST request on the given url.
The optional function parameter allows you to specify System.Net.HttpWebRequest options, like the UserAgent, Headers etc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
' WebRequest - POST ' Declare url Dim url = $"https://jsonplaceholder.typicode.com/users" ' Optional: Specify request options Dim options = New Utils.WebRequest.Options With { .UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0", .ContentType = Utils.WebRequest.ContentType.ApplicationJson, .Headers = New System.Net.WebHeaderCollection From { {"key", "value"} } } ' Serialize object to Json to create a new employee Dim payload = " { ""id"": 0, ""name"": ""Kenneth Perkins"", ""username"": null, ""email"": null, ""address"": null, ""phone"": null, ""website"": null, ""company"": null } " ' Execute a post request at the following url Dim response = Await Utils.WebRequest.PostAsync(url, payload, options) ' Display the status code and response body Debug.Print($" Status: {CInt(response.Result.StatusCode)} - {response.Result.StatusDescription} Bytes Received: {response.Bytes.Length} Body: {response.Body} ") ' .... Do something with response.Body like deserialize it to an object ' expected output: ' Status: 201 - Created ' Bytes Received: 154 ' Body: { ' "id": 11, ' "name": "Kenneth Perkins", ' "username": null, ' "email": null, ' "address": null, ' "phone": null, ' "website": null, ' "company": null ' } |
4. WebRequest – PUT
The example below demonstrates the use of ‘Utils.WebRequest.Put‘ to execute a PUT request on the given url.
The optional function parameter allows you to specify System.Net.HttpWebRequest options, like the UserAgent, Headers etc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
' WebRequest - PUT ' Declare url Dim url = $"https://jsonplaceholder.typicode.com/users/1" ' Optional: Specify request options Dim options = New Utils.WebRequest.Options With { .UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0", .ContentType = Utils.WebRequest.ContentType.ApplicationJson, .Headers = New System.Net.WebHeaderCollection From { {"key", "value"} } } ' Serialize object to Json to update an existing employee Dim payload = " { ""name"": ""Kenneth Perkins"", ""website"": ""https://www.programmingnotes.org/"" } " ' Execute a put request at the following url Dim response = Await Utils.WebRequest.PutAsync(url, payload, options) ' Display the status code and response body Debug.Print($" Status: {CInt(response.Result.StatusCode)} - {response.Result.StatusDescription} Bytes Received: {response.Bytes.Length} Body: {response.Body} ") ' .... Do something with response.Body like deserialize it to an object ' expected output: ' Status: 200 - OK ' Bytes Received: 87 ' Body: { ' "name": "Kenneth Perkins", ' "website": "https://www.programmingnotes.org/", ' "id": 1 ' } |
5. WebRequest – PATCH
The example below demonstrates the use of ‘Utils.WebRequest.Patch‘ to execute a PATCH request on the given url.
The optional function parameter allows you to specify System.Net.HttpWebRequest options, like the UserAgent, Headers etc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
' WebRequest - PATCH ' Declare url Dim url = $"https://jsonplaceholder.typicode.com/users/1" ' Optional: Specify request options Dim options = New Utils.WebRequest.Options With { .UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0", .ContentType = Utils.WebRequest.ContentType.ApplicationJson, .Headers = New System.Net.WebHeaderCollection From { {"key", "value"} } } ' Serialize object to Json to update an existing employee Dim payload = " { ""name"": ""Kenneth Perkins"", ""website"": ""https://www.programmingnotes.org/"" } " ' Execute a patch request at the following url Dim response = Await Utils.WebRequest.PatchAsync(url, payload, options) ' Display the status code and response body Debug.Print($" Status: {CInt(response.Result.StatusCode)} - {response.Result.StatusDescription} Bytes Received: {response.Bytes.Length} Body: {response.Body} ") ' .... Do something with response.Body like deserialize it to an object ' expected output: ' Status: 200 - OK ' Bytes Received: 526 ' Body: { ' "id": 1, ' "name": "Kenneth Perkins", ' "username": "Bret", ' "email": "Sincere@april.biz", ' "address": { ' "street": "Kulas Light", ' "suite": "Apt. 556", ' "city": "Gwenborough", ' "zipcode": "92998-3874", ' "geo": { ' "lat": "-37.3159", ' "lng": "81.1496" ' } ' }, ' "phone": "1-770-736-8031 x56442", ' "website": "https://www.programmingnotes.org/", ' "company": { ' "name": "Romaguera-Crona", ' "catchPhrase": "Multi-layered client-server neural-net", ' "bs": "harness real-time e-markets" ' } ' } |
6. WebRequest – DELETE
The example below demonstrates the use of ‘Utils.WebRequest.Delete‘ to execute a DELETE request on the given url.
The optional function parameter allows you to specify System.Net.HttpWebRequest options, like the UserAgent, Headers etc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
' WebRequest - DELETE ' Declare url Dim url = $"https://jsonplaceholder.typicode.com/users/1" ' Optional: Specify request options Dim options = New Utils.WebRequest.Options With { .UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0", .Headers = New System.Net.WebHeaderCollection From { {"key", "value"} } } ' Execute a delete request at the following url Dim response = Await Utils.WebRequest.DeleteAsync(url, options) ' Display the status code and response body Debug.Print($" Status: {CInt(response.Result.StatusCode)} - {response.Result.StatusDescription} Bytes Received: {response.Bytes.Length} Body: {response.Body} ") ' .... Do something with response.Body like deserialize it to an object ' expected output: ' Status: 200 - OK ' Bytes Received: 2 ' Body: {} |
7. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 18, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Imports System Imports System.Linq Imports System.Threading.Tasks Namespace Global.Utils Namespace WebRequest Public Module modRequest ''' <summary> ''' Executes a GET request on the given url ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function [Get](url As String _ , Optional options As Options = Nothing) As Response Return GetAsync(url, options:=options).Result End Function ''' <summary> ''' Executes a GET request on the given url as an asynchronous operation ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function GetAsync(url As String _ , Optional options As Options = Nothing) As Task(Of Response) Return ExecuteAsync(Method.Get, url, payload:=CType(Nothing, Byte()), options:=options) End Function ''' <summary> ''' Executes a POST request on the given url ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to post to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function Post(url As String, payload As String _ , Optional options As Options = Nothing) As Response Return Post(url, payload:=payload.GetBytes, options:=options) End Function ''' <summary> ''' Executes a POST request on the given url ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to post to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function Post(url As String, payload As Byte() _ , Optional options As Options = Nothing) As Response Return PostAsync(url, payload:=payload, options:=options).Result End Function ''' <summary> ''' Executes a POST request on the given url as an asynchronous operation ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to post to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function PostAsync(url As String, payload As String _ , Optional options As Options = Nothing) As Task(Of Response) Return PostAsync(url, payload:=payload.GetBytes, options:=options) End Function ''' <summary> ''' Executes a POST request on the given url as an asynchronous operation ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to post to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function PostAsync(url As String, payload As Byte() _ , Optional options As Options = Nothing) As Task(Of Response) Return ExecuteAsync(Method.Post, url, payload:=payload, options:=options) End Function ''' <summary> ''' Executes a PUT request on the given url ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to put to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function Put(url As String, payload As String _ , Optional options As Options = Nothing) As Response Return Put(url, payload:=payload.GetBytes, options:=options) End Function ''' <summary> ''' Executes a PUT request on the given url ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to put to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function Put(url As String, payload As Byte() _ , Optional options As Options = Nothing) As Response Return PutAsync(url, payload:=payload, options:=options).Result End Function ''' <summary> ''' Executes a PUT request on the given url as an asynchronous operation ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to put to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function PutAsync(url As String, payload As String _ , Optional options As Options = Nothing) As Task(Of Response) Return PutAsync(url, payload:=payload.GetBytes, options:=options) End Function ''' <summary> ''' Executes a PUT request on the given url as an asynchronous operation ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to put to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function PutAsync(url As String, payload As Byte() _ , Optional options As Options = Nothing) As Task(Of Response) Return ExecuteAsync(Method.Put, url, payload:=payload, options:=options) End Function ''' <summary> ''' Executes a PATCH request on the given url ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to patch to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function Patch(url As String, payload As String _ , Optional options As Options = Nothing) As Response Return Patch(url, payload:=payload.GetBytes, options:=options) End Function ''' <summary> ''' Executes a PATCH request on the given url ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to patch to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function Patch(url As String, payload As Byte() _ , Optional options As Options = Nothing) As Response Return PatchAsync(url, payload:=payload, options:=options).Result End Function ''' <summary> ''' Executes a PATCH request on the given url as an asynchronous operation ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to patch to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function PatchAsync(url As String, payload As String _ , Optional options As Options = Nothing) As Task(Of Response) Return PatchAsync(url, payload:=payload.GetBytes, options:=options) End Function ''' <summary> ''' Executes a PATCH request on the given url as an asynchronous operation ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to patch to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function PatchAsync(url As String, payload As Byte() _ , Optional options As Options = Nothing) As Task(Of Response) Return ExecuteAsync(Method.Patch, url, payload:=payload, options:=options) End Function ''' <summary> ''' Executes a DELETE request on the given url ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function Delete(url As String _ , Optional options As Options = Nothing) As Response Return DeleteAsync(url, options:=options).Result End Function ''' <summary> ''' Executes a DELETE request on the given url as an asynchronous operation ''' </summary> ''' <param name="url">The url to navigate to</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function DeleteAsync(url As String _ , Optional options As Options = Nothing) As Task(Of Response) Return ExecuteAsync(Method.Delete, url, payload:=CType(Nothing, Byte()), options:=options) End Function ''' <summary> ''' Executes a request method on the given url as an asynchronous operation ''' </summary> ''' <param name="type">The type of request method to execute</param> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to send to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Function ExecuteAsync(type As Method _ , url As String _ , Optional payload As String = Nothing _ , Optional options As Options = Nothing) As Task(Of Response) Return ExecuteAsync(type, url, payload:=CType(payload?.GetBytes, Byte()), options:=options) End Function ''' <summary> ''' Executes a request method on the given url as an asynchronous operation ''' </summary> ''' <param name="type">The type of request method to execute</param> ''' <param name="url">The url to navigate to</param> ''' <param name="payload">The data to send to the specified resource</param> ''' <param name="options">The options for the web request</param> ''' <returns>The result of the given request</returns> Public Async Function ExecuteAsync(type As Method _ , url As String _ , Optional payload As Byte() = Nothing _ , Optional options As Options = Nothing) As Task(Of Response) Dim request = CType(System.Net.WebRequest.Create(url), System.Net.HttpWebRequest) If options IsNot Nothing Then request.CopyProperties(options) End If request.Method = type.ToString.ToUpper If payload IsNot Nothing Then request.ContentLength = payload.Length Using requestStream = request.GetRequestStream Using payloadStream = New System.IO.MemoryStream(payload) payloadStream.CopyTo(requestStream) End Using End Using End If Dim webResponse As System.Net.HttpWebResponse = Nothing Try webResponse = CType(Await request.GetResponseAsync(), System.Net.HttpWebResponse) Catch ex As System.Net.WebException If ex.Response Is Nothing Then Throw End If webResponse = CType(ex.Response, System.Net.HttpWebResponse) Catch ex As Exception Throw End Try Dim result = New Response With { .Result = webResponse, .Bytes = GetBytes(webResponse) } Return result End Function Private Function GetBytes(response As System.Net.HttpWebResponse) As Byte() Dim bytes As Byte() Dim responseStream = response.GetResponseStream() Using memoryStream = New System.IO.MemoryStream responseStream.CopyTo(memoryStream) bytes = memoryStream.ToArray End Using Return bytes End Function <Runtime.CompilerServices.Extension()> Public Function GetBytes(str As String, Optional encode As System.Text.Encoding = Nothing) As Byte() If encode Is Nothing Then encode = GetDefaultEncoding() End If Return encode.GetBytes(str) End Function <Runtime.CompilerServices.Extension()> Public Function GetString(bytes As Byte(), Optional encode As System.Text.Encoding = Nothing) As String If encode Is Nothing Then encode = GetDefaultEncoding() End If Return encode.GetString(bytes) End Function Private Function GetDefaultEncoding() As System.Text.Encoding Static encode As New System.Text.UTF8Encoding Return encode End Function <Runtime.CompilerServices.Extension()> Private Sub CopyProperties(Of T1, T2)(dest As T1, src As T2) Dim srcProps = src.GetType().GetProperties() Dim destProps = dest.GetType().GetProperties() For Each srcProp In srcProps If srcProp.CanRead Then Dim destProp = destProps.FirstOrDefault(Function(x) x.Name = srcProp.Name) If destProp IsNot Nothing AndAlso destProp.CanWrite Then Dim value = srcProp.GetValue(src, If(srcProp.GetIndexParameters.Count = 1, New Object() {Nothing}, Nothing)) destProp.SetValue(dest, value) End If End If Next End Sub End Module ''' <summary> ''' The response result of a <see cref="System.Net.HttpWebRequest"/> ''' </summary> Public Class Response Public Property Result As System.Net.HttpWebResponse = Nothing Public Property Bytes As Byte() = Nothing Public ReadOnly Property Body As String Get If _body Is Nothing AndAlso Bytes IsNot Nothing Then _body = Bytes.GetString() End If Return _body End Get End Property Private _body As String = Nothing End Class ''' <summary> ''' Options for the given <see cref="System.Net.HttpWebRequest"/> ''' </summary> Public Class Options Public Property Headers As New System.Net.WebHeaderCollection Public Property Credentials As System.Net.ICredentials = Nothing Public Property Connection As String = Nothing Public Property KeepAlive As Boolean = True Public Property Expect As String = Nothing Public Property IfModifiedSince As Date Public Property TransferEncoding As String Public Property Accept As String = Nothing Public Property AllowAutoRedirect As Boolean = True Public Property AllowReadStreamBuffering As Boolean = False Public Property AllowWriteStreamBuffering As Boolean = True Public Property MaximumAutomaticRedirections As Integer = 50 Public Property MediaType As String = Nothing Public Property Pipelined As Boolean = True Public Property PreAuthenticate As Boolean = False Public Property Referer As String = Nothing Public Property SendChunked As Boolean = False Public Property UseDefaultCredentials As Boolean = False Public Property UserAgent As String = Nothing Public Property ContentType As String = Nothing Public Property Timeout As Integer = 100000 Public Property ReadWriteTimeout As Integer = 300000 End Class Public MustInherit Class ContentType Public Const ApplicationUrlEncoded As String = "application/x-www-form-urlencoded" Public Const ApplicationJson As String = "application/json" Public Const TextXml As String = "text/xml" End Class Public Enum Method [Get] Post Put Patch Delete End Enum End Namespace End Namespace ' http://programmingnotes.org/ |
8. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 18, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Public Module Program Sub Main(args As String()) Try ProcessRequests().Wait() Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Async Function ProcessRequests() As Task ' Declare url Dim url = "https://jsonplaceholder.typicode.com/users" ' Optional: Specify request options Dim options = New Utils.WebRequest.Options With { .UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0", .Headers = New System.Net.WebHeaderCollection From { {"key", "value"} } } ' Execute a get request at the following url Dim response = Await Utils.WebRequest.GetAsync(url) ' Display the status code and response body Display($" Status: {CInt(response.Result.StatusCode)} - {response.Result.StatusDescription} Bytes Received: {response.Bytes.Length} Body: {response.Body} ") Display("") ' Declare url Dim url2 = $"https://jsonplaceholder.typicode.com/users" ' Optional: Specify request options Dim options2 = New Utils.WebRequest.Options With { .UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0", .ContentType = Utils.WebRequest.ContentType.ApplicationJson, .Headers = New System.Net.WebHeaderCollection From { {"key", "value"} } } ' Serialize object to get the Json to create a new employee Dim payload = " { ""id"": 0, ""name"": ""Kenneth Perkins"", ""username"": null, ""email"": null, ""address"": null, ""phone"": null, ""website"": null, ""company"": null } " ' Execute a post request at the following url Dim response2 = Await Utils.WebRequest.PostAsync(url2, payload, options2) ' Display the status code and response body Display($" Status: {CInt(response2.Result.StatusCode)} - {response2.Result.StatusDescription} Bytes Received: {response2.Bytes.Length} Body: {response2.Body} ") Display("") ' Declare url Dim url3 = $"https://jsonplaceholder.typicode.com/users/1" ' Optional: Specify request options Dim options3 = New Utils.WebRequest.Options With { .UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0", .ContentType = Utils.WebRequest.ContentType.ApplicationJson, .Headers = New System.Net.WebHeaderCollection From { {"key", "value"} } } ' Serialize object to Json to update an existing employee Dim payload3 = " { ""name"": ""Kenneth Perkins"", ""website"": ""https://www.programmingnotes.org/"" } " ' Execute a put request at the following url Dim response3 = Await Utils.WebRequest.PutAsync(url3, payload3, options3) ' Display the status code and response body Display($" Status: {CInt(response3.Result.StatusCode)} - {response3.Result.StatusDescription} Bytes Received: {response3.Bytes.Length} Body: {response3.Body} ") Display("") ' Declare url Dim employeeId = 1 Dim url4 = $"https://jsonplaceholder.typicode.com/users/{employeeId}" ' Optional: Specify request options Dim options4 = New Utils.WebRequest.Options With { .UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0", .Headers = New System.Net.WebHeaderCollection From { {"key", "value"} } } ' Execute a delete request at the following url Dim response4 = Await Utils.WebRequest.DeleteAsync(url4, options4) ' Display the status code and response body Display($" Status: {CInt(response4.Result.StatusCode)} - {response4.Result.StatusDescription} Bytes Received: {response4.Bytes.Length} Body: {response4.Body} ") Display("") ' Declare url Dim url5 = $"https://jsonplaceholder.typicode.com/users/1" ' Optional: Specify request options Dim options5 = New Utils.WebRequest.Options With { .UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0", .ContentType = Utils.WebRequest.ContentType.ApplicationJson, .Headers = New System.Net.WebHeaderCollection From { {"key", "value"} } } ' Serialize object to Json to update an existing employee Dim payload5 = " { ""name"": ""Kenneth Perkins"", ""website"": ""https://www.programmingnotes.org/"" } " ' Execute a patch request at the following url Dim response5 = Await Utils.WebRequest.PatchAsync(url5, payload5, options5) ' Display the status code and response body Display($" Status: {CInt(response5.Result.StatusCode)} - {response5.Result.StatusDescription} Bytes Received: {response5.Bytes.Length} Body: {response5.Body} ") End Function Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
VB.NET || How To Check If A String Is A Valid HTTP URL Using VB.NET

The following is a module with functions which demonstrates how to check whether a string is a valid HTTP URL using VB.NET.
Note: The following function only checks for valid url formatting. It does not determine if the address behind the url is valid for navigation.
1. Is Valid URL
The example below demonstrates the use of ‘Utils.Http.IsValidURL‘ to check whether a string is a valid HTTP URL.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
' Is Valid URL ' Declare urls Dim urls = New String() { "https://www.programmingnotes.org", "http://www.programmingnotes.org", "www.programmingnotes.org", "programmingnotes.org", "javascript:alert('programmingnotes.org')", "programmingnotes", "programmingnotes.org/path?queryparam=123", "t:/www.programmingnotes.org", ":programmingnotes.org", "http/programmingnotes.org", "h91ps://programmingnotes.org/", "//programmingnotes.org/", "www@.programmingnotes.org", "protocol://programmingnotes.org/path?queryparam=123", ":programmingnotes.org/", ":programmingnotes.org:80/", "programmingnotes.org:80/", "mailto:test@email.com", "test@email.com", "file:///path/to/file/text.doc", "http://192.168.1.1/", "192.168.1.1" } ' Check if valid For Each url In urls Debug.Print($"URL: {url}, Is Valid: {Utils.Http.IsValidURL(url)}") Next ' expected output: ' URL: https://www.programmingnotes.org, Is Valid: True ' URL: http://www.programmingnotes.org, Is Valid: True ' URL: www.programmingnotes.org, Is Valid: True ' URL: programmingnotes.org, Is Valid: True ' URL: javascript:alert('programmingnotes.org'), Is Valid: False ' URL: programmingnotes, Is Valid: False ' URL: programmingnotes.org/path?queryparam=123, Is Valid: True ' URL: t:/www.programmingnotes.org, Is Valid: False ' URL: :programmingnotes.org, Is Valid: False ' URL: http/programmingnotes.org, Is Valid: False ' URL: h91ps://programmingnotes.org/, Is Valid: False ' URL: //programmingnotes.org/, Is Valid: False ' URL: www@.programmingnotes.org, Is Valid: False ' URL: protocol://programmingnotes.org/path?queryparam=123, Is Valid: False ' URL: :programmingnotes.org/, Is Valid: False ' URL: :programmingnotes.org:80/, Is Valid: False ' URL: programmingnotes.org:80/, Is Valid: True ' URL: mailto:test@email.com, Is Valid: False ' URL: test@email.com, Is Valid: False ' URL: file:///path/to/file/text.doc, Is Valid: False ' URL: http://192.168.1.1/, Is Valid: True ' URL: 192.168.1.1, Is Valid: True |
2. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 18, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Namespace Global.Utils Namespace Http Public Module modHttp ''' <summary> ''' Determines if a url is valid or not ''' </summary> ''' <param name="url">The url to check</param> ''' <returns>True if a url is valid, false otherwise</returns> Public Function IsValidURL(url As String) As Boolean Dim period = url.IndexOf(".") If period > -1 AndAlso Not url.Contains("@") Then ' Check if there are remnants where the url scheme should be. ' Dont modify string if so Dim colon = url.IndexOf(":") Dim slash = url.IndexOf("/") If (colon = -1 OrElse period < colon) AndAlso (slash = -1 OrElse period < slash) Then url = $"http://{url}" End If End If Dim uriResult As System.Uri = Nothing Dim result = System.Uri.TryCreate(url, System.UriKind.Absolute, uriResult) _ AndAlso (uriResult.Scheme = System.Uri.UriSchemeHttp OrElse uriResult.Scheme = System.Uri.UriSchemeHttps) Return result End Function End Module End Namespace End Namespace ' http://programmingnotes.org/ |
3. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 18, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Public Module Program Sub Main(args As String()) Try ' Declare urls Dim urls = New String() { "https://www.programmingnotes.org", "http://www.programmingnotes.org", "www.programmingnotes.org", "programmingnotes.org", "javascript:alert('programmingnotes.org')", "programmingnotes", "programmingnotes.org/path?queryparam=123", "t:/www.programmingnotes.org", ":programmingnotes.org", "http/programmingnotes.org", "h91ps://programmingnotes.org/", "//programmingnotes.org/", "www@.programmingnotes.org", "protocol://programmingnotes.org/path?queryparam=123", ":programmingnotes.org/", ":programmingnotes.org:80/", "programmingnotes.org:80/", "mailto:test@email.com", "test@email.com", "file:///path/to/file/text.doc", "http://192.168.1.1/", "192.168.1.1" } ' Check if valid For Each url In urls Display($"URL: {url}, Is Valid: {Utils.Http.IsValidURL(url)}") Next Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
VB.NET || How To Get, Add, Update & Remove Values From A URL Query String Using VB.NET

The following is a module with functions which demonstrates how to get, add, update and remove parameters from a query string using C#.
The following functions use System.Web to modify the url.
To use the functions in this module, make sure you have a reference to ‘System.Web‘ in your project.
One way to do this is, in your Solution Explorer (where all the files are shown with your project), right click the ‘References‘ folder, click ‘Add Reference‘, then type ‘System.Web‘ in the search box, and add the reference titled System.Web in the results Tab.
Note: Don’t forget to include the ‘Utils Namespace‘ before running the examples!
1. Add – Single Parameter
The example below demonstrates the use of ‘Utils.HttpParams.Add‘ to add a query string parameter to a url.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
' Add - Single Parameter ' Declare url Dim url = "http://programmingnotes.org/" ' Add single key value parameter to the url Dim result = Utils.HttpParams.Add(url, New KeyValuePair(Of String, String)("ids", "1987")) ' Display result Debug.Print(result) ' expected output: ' http://programmingnotes.org/?ids=1987 |
2. Add – Multiple Parameters
The example below demonstrates the use of ‘Utils.HttpParams.Add‘ to add a query string parameter to a url.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
' Add - Multiple Parameters ' Declare url Dim url = "http://programmingnotes.org/?ids=1987,1991&names=Kenneth,Jennifer" ' Add multiple key value parameters to the url Dim addition = New System.Collections.Specialized.NameValueCollection() From { {"ids", "2010"}, {"ids", "2019"}, {"names", "Lynn"}, {"names", "Sole"} } ' Update the url Dim result = Utils.HttpParams.Add(url, addition) ' Display result Debug.Print(result) ' expected output: ' http://programmingnotes.org/?ids=1987%2c1991%2c2010%2c2019&names=Kenneth%2cJennifer%2cLynn%2cSole |
3. Update – Single Parameter
The example below demonstrates the use of ‘Utils.HttpParams.Update‘ to update a query string parameter to a url.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
' Update - Single Parameter ' Declare url Dim url = "http://programmingnotes.org/?ids=1987" ' Update single key value parameter to the url Dim result = Utils.HttpParams.Update(url7, New KeyValuePair(Of String, String)("ids", "1991")) ' Display result Debug.Print(result) ' expected output: ' http://programmingnotes.org/?ids=1991 |
4. Update – Multiple Parameters
The example below demonstrates the use of ‘Utils.HttpParams.Update‘ to update a query string parameter to a url.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
' Update - Multiple Parameters ' Declare url Dim url = "http://programmingnotes.org/?ids=1987,1991&names=Kenneth,Jennifer" ' Update multiple key value parameters to the url Dim addition = New System.Collections.Specialized.NameValueCollection() From { {"ids", "2010"}, {"ids", "2019"}, {"names", "Lynn"}, {"names", "Sole"} } ' Update the url Dim result = Utils.HttpParams.Update(url, addition) ' Display result Debug.Print(result) ' expected output: ' http://programmingnotes.org/?ids=2010%2c2019&names=Lynn%2cSole |
5. Remove – Single Parameter
The example below demonstrates the use of ‘Utils.HttpParams.Remove‘ to remove a query string parameter from a url.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
' Remove - Single Parameter ' Declare url Dim url = "http://programmingnotes.org/?ids=1987,1991&names=Kenneth,Jennifer" ' Remove single parameter from the url Dim result = Utils.HttpParams.Remove(url, "names") ' Display result Debug.Print(result) ' expected output: ' http://programmingnotes.org/?ids=1987%2c1991 |
6. Remove – Multiple Parameters
The example below demonstrates the use of ‘Utils.HttpParams.Remove‘ to remove multiple query string parameters from a url.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
' Remove - Multiple Parameters ' Declare url Dim url = "http://programmingnotes.org/?ids=1987,1991&names=Kenneth,Jennifer" ' Remove multiple parameters from the url Dim result = Utils.HttpParams.Remove(url, New String() {"ids", "names"}) ' Display result Debug.Print(result) ' expected output: ' http://programmingnotes.org/ |
7. Clear – Remove All Parameters
The example below demonstrates the use of ‘Utils.HttpParams.Clear‘ to remove all query string parameters from a url.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
' Clear - Remove All Parameters ' Declare url Dim url = "http://programmingnotes.org/?ids=1987,1991&names=Kenneth,Jennifer" ' Remove multiple parameters from the url Dim result = Utils.HttpParams.Clear(url) ' Display result Debug.Print(result) ' expected output: ' http://programmingnotes.org/ |
8. Get – Get All Parameters
The example below demonstrates the use of ‘Utils.HttpParams.Get‘ to get all query string parameters from a url.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
' Get - Get All Parameters ' Declare url Dim url = "http://programmingnotes.org/?ids=1987,1991,2010,2019&names=Kenneth,Jennifer,Lynn,Sole" ' Get parameters from the url Dim result = Utils.HttpParams.Get(url) ' Display result For Each key As String In result Debug.Print($"Parameter: {key}, Value: {result(key)}") Next ' expected output: ' Parameter: ids, Value: 1987,1991,2010,2019 ' Parameter: names, Value: Kenneth,Jennifer,Lynn,Sole |
9. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 17, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Namespace Global.Utils Namespace HttpParams Public Module modHttpParams ''' <summary> ''' Adds the query string parameters to a url ''' </summary> ''' <param name="url">The url to append parameters</param> ''' <param name="query">The parameters to add to the url</param> ''' <returns>The url appended with the specified query</returns> Function Add(url As String, query As System.Collections.Specialized.NameValueCollection) As String Return UpdateQuery(url, Sub(queryString) Dim merged = New System.Collections.Specialized.NameValueCollection From { queryString, query } CopyProps(merged, queryString) End Sub) End Function ''' <summary> ''' Adds the query string parameters to a url ''' </summary> ''' <param name="url">The url to append parameters</param> ''' <param name="param">The parameters to add to the url</param> ''' <returns>The url appended with the specified query</returns> Function Add(url As String, param As KeyValuePair(Of String, String)) As String Return Add(url, New System.Collections.Specialized.NameValueCollection() From { {param.Key, param.Value} }) End Function ''' <summary> ''' Updates the query string parameters to a url ''' </summary> ''' <param name="url">The url to update parameters</param> ''' <param name="query">The parameters to update to the url</param> ''' <returns>The url updated with the specified query</returns> Function Update(url As String, query As System.Collections.Specialized.NameValueCollection) As String Return UpdateQuery(url, Sub(queryString) CopyProps(query, queryString) End Sub) End Function ''' <summary> ''' Updates the query string parameters to a url ''' </summary> ''' <param name="url">The url to update parameters</param> ''' <param name="param">The parameters to update to the url</param> ''' <returns>The url updated with the specified query</returns> Function Update(url As String, param As KeyValuePair(Of String, String)) As String Return Update(url, New System.Collections.Specialized.NameValueCollection() From { {param.Key, param.Value} }) End Function ''' <summary> ''' Removes the parameters with the matching keys from the query string of a url ''' </summary> ''' <param name="url">The url to remove parameters</param> ''' <param name="keys">The parameter keys to remove from the url</param> ''' <returns>The url with the parameters removed</returns> Function Remove(url As String, keys As IEnumerable(Of String)) As String Return UpdateQuery(url, Sub(queryString) For Each key In keys If queryString.AllKeys.Contains(key) Then queryString.Remove(key) End If Next End Sub) End Function ''' <summary> ''' Removes the parameter with the matching key from the query string of a url ''' </summary> ''' <param name="url">The url to remove a parameter</param> ''' <param name="key">The parameter key to remove from the url</param> ''' <returns>The url with the parameter removed</returns> Function Remove(url As String, key As String) As String Return Remove(url, New String() {key}) End Function ''' <summary> ''' Removes all parameters from the query string of a url ''' </summary> ''' <param name="url">The url to clear parameters</param> ''' <returns>The url with the parameters removed</returns> Function Clear(url As String) As String Return UpdateQuery(url, Sub(queryString) queryString.Clear() End Sub) End Function ''' <summary> ''' Returns all parameters from the query string of a url ''' </summary> ''' <param name="url">The url to get parameters</param> ''' <returns>The url parameters</returns> Function [Get](url As String) As System.Collections.Specialized.NameValueCollection Dim result As System.Collections.Specialized.NameValueCollection = Nothing UpdateQuery(url, Sub(queryString) result = queryString End Sub) Return result End Function ''' <summary> ''' Sets the query string parameters to a url ''' </summary> ''' <param name="url">The url to set parameters</param> ''' <param name="query">The parameters to set to the url</param> ''' <returns>The url set with the specified query</returns> Function [Set](url As String, query As System.Collections.Specialized.NameValueCollection) As String url = Clear(url) Return Add(url, query) End Function ''' <summary> ''' Sets the query string parameters to a url ''' </summary> ''' <param name="url">The url to set parameters</param> ''' <param name="param">The parameters to set to the url</param> ''' <returns>The url set with the specified query</returns> Function [Set](url As String, param As KeyValuePair(Of String, String)) As String Return [Set](url, New System.Collections.Specialized.NameValueCollection() From { {param.Key, param.Value} }) End Function Private Sub CopyProps(source As System.Collections.Specialized.NameValueCollection, destination As System.Collections.Specialized.NameValueCollection) For Each key As String In source destination(key) = source(key) Next End Sub Private Function UpdateQuery(url As String, modifyQuery As Action(Of System.Collections.Specialized.NameValueCollection)) As String Dim uriBuilder = New System.UriBuilder(url) Dim query = System.Web.HttpUtility.ParseQueryString(uriBuilder.Query) modifyQuery(query) uriBuilder.Query = query.ToString() Return uriBuilder.Uri.ToString() End Function End Module End Namespace End Namespace ' http://programmingnotes.org/ |
10. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 17, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Public Module Program Sub Main(args As String()) Try ' Declare url Dim url = "http://programmingnotes.org/" ' Add single key value parameter to the url Dim result = Utils.HttpParams.Add(url, New KeyValuePair(Of String, String)("ids", "1987")) ' Display result Display(result) Display("") ' Declare url Dim url2 = "http://programmingnotes.org/?ids=1987,1991&names=Kenneth,Jennifer" ' Add multiple key value parameters to the url Dim addition = New System.Collections.Specialized.NameValueCollection() From { {"ids", "2010"}, {"ids", "2019"}, {"names", "Lynn"}, {"names", "Sole"} } ' Update the url Dim result2 = Utils.HttpParams.Add(url2, addition) ' Display result Display(result2) Display("") ' Declare url Dim url3 = "http://programmingnotes.org/?ids=1987,1991&names=Kenneth,Jennifer" ' Remove single parameter from the url Dim result3 = Utils.HttpParams.Remove(url3, "names") ' Display result Display(result3) Display("") ' Declare url Dim url4 = "http://programmingnotes.org/?ids=1987,1991&names=Kenneth,Jennifer" ' Remove multiple parameters from the url Dim result4 = Utils.HttpParams.Remove(url4, New String() {"ids", "names"}) ' Display result Display(result4) Display("") ' Declare url Dim url5 = "http://programmingnotes.org/?ids=1987,1991&names=Kenneth,Jennifer" ' Remove multiple parameters from the url Dim result5 = Utils.HttpParams.Clear(url5) ' Display result Display(result5) Display("") ' Declare url Dim url6 = "http://programmingnotes.org/?ids=1987,1991,2010,2019&names=Kenneth,Jennifer,Lynn,Sole" ' Get parameters from the url Dim result6 = Utils.HttpParams.Get(url6) ' Display result For Each key As String In result6 Display($"Parameter: {key}, Value: {result6(key)}") Next Display("") ' Declare url Dim url7 = "http://programmingnotes.org/?ids=1987" ' Update single key value parameter to the url Dim result7 = Utils.HttpParams.Update(url7, New KeyValuePair(Of String, String)("ids", "1991")) ' Display result Display(result7) Display("") ' Declare url Dim url8 = "http://programmingnotes.org/?ids=1987,1991&names=Kenneth,Jennifer" ' Update multiple key value parameters to the url Dim addition8 = New System.Collections.Specialized.NameValueCollection() From { {"ids", "2010"}, {"ids", "2019"}, {"names", "Lynn"}, {"names", "Sole"} } ' Update the url Dim result8 = Utils.HttpParams.Update(url8, addition8) ' Display result Display(result8) Display("") ' Declare url Dim url9 = "http://programmingnotes.org/?ids=1987&names=Kenneth" ' Set multiple key value parameters to the url Dim addition9 = New System.Collections.Specialized.NameValueCollection() From { {"ids", "1991"}, {"ids", "2010"}, {"ids", "2019"}, {"names", "Jennifer"}, {"names", "Lynn"}, {"names", "Sole"} } ' Update the url Dim result9 = Utils.HttpParams.Set(url9, addition9) ' Display result Display(result9) Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
VB.NET || How To Serialize & Deserialize JSON Using VB.NET

The following is a module with functions which demonstrates how to serialize and deserialize Json using VB.NET.
The following generic functions use Newtonsoft.Json to serialize and deserialize an object.
Note: To use the functions in this module, make sure you have the ‘Newtonsoft.Json‘ package installed in your project.
One way to do this is, in your Solution Explorer (where all the files are shown with your project), right click the ‘References‘ folder, click ‘Manage NuGet Packages….‘, then type ‘Newtonsoft.Json‘ in the search box, and install the package titled Newtonsoft.Json in the results Tab.
Note: Don’t forget to include the ‘Utils Namespace‘ before running the examples!
1. Serialize – Integer Array
The example below demonstrates the use of ‘Utils.Json.Serialize‘ to serialize an integer array to Json.
The optional function parameter allows you to specify the Newtonsoft.Json.JsonSerializerSettings.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
' Serialize - Integer Array ' Declare array of integers Dim numbers = New Integer() {1987, 19, 22, 2009, 2019, 1991, 28, 31} ' Optional: Create the JsonSerializerSettings with optional settings. Dim settings = New Newtonsoft.Json.JsonSerializerSettings With { .NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore } ' Serialize to Json Dim numbersJson = Utils.Json.Serialize(numbers) ' Display Json Debug.Print(numbersJson) ' expected output: ' [ ' 1987, ' 19, ' 22, ' 2009, ' 2019, ' 1991, ' 28, ' 31 ' ] |
2. Serialize – String List
The example below demonstrates the use of ‘Utils.Json.Serialize‘ to serialize a list of strings to Json.
The optional function parameter allows you to specify the Newtonsoft.Json.JsonSerializerSettings.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
' Serialize - String List ' Declare list of strings Dim names = New List(Of String) From { "Kenneth", "Jennifer", "Lynn", "Sole" } ' Serialize to Json Dim namesJson = Utils.Json.Serialize(names) ' Display Json Debug.Print(namesJson) ' expected output: ' [ ' "Kenneth", ' "Jennifer", ' "Lynn", ' "Sole" ' ] |
3. Serialize – Custom Object List
The example below demonstrates the use of ‘Utils.Json.Serialize‘ to serialize a list of custom objects to Json.
The optional function parameter allows you to specify the Newtonsoft.Json.JsonSerializerSettings.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
' Serialize - Custom Object List Public Class Part Public Property PartName As String Public Property PartId As Integer End Class ' Declare list of objects Dim parts = New List(Of Part) From { New Part With { .PartName = "crank arm", .PartId = 1234 }, New Part With { .PartName = "chain ring", .PartId = 1334 }, New Part With { .PartName = "regular seat", .PartId = 1434 }, New Part With { .PartName = "banana seat", .PartId = 1444 }, New Part With { .PartName = "cassette", .PartId = 1534 }, New Part With { .PartName = "shift lever", .PartId = 1634 }} ' Serialize to Json Dim partsJson = Utils.Json.Serialize(parts) ' Display Json Debug.Print(partsJson) ' expected output: ' [ ' { ' "PartName": "crank arm", ' "PartId": 1234 ' }, ' { ' "PartName": "chain ring", ' "PartId": 1334 ' }, ' { ' "PartName": "regular seat", ' "PartId": 1434 ' }, ' { ' "PartName": "banana seat", ' "PartId": 1444 ' }, ' { ' "PartName": "cassette", ' "PartId": 1534 ' }, ' { ' "PartName": "shift lever", ' "PartId": 1634 ' } ' ] |
4. Deserialize – Integer Array
The example below demonstrates the use of ‘Utils.Json.Deserialize‘ to deserialize Json to an integer array.
The optional function parameter allows you to specify the Newtonsoft.Json.JsonSerializerSettings.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
' Deserialize - Integer Array ' Declare Json array of integers Dim numbersJson = " [ 1987, 19, 22, 2009, 2019, 1991, 28, 31 ] " ' Optional: Create the JsonSerializerSettings with optional settings. Dim settings = New Newtonsoft.Json.JsonSerializerSettings With { .NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore } ' Deserialize from Json to specified type Dim numbers = Utils.Json.Deserialize(Of Integer())(numbersJson) ' Display the items For Each item In numbers Debug.Print($"{item}") Next ' expected output: ' 1987 ' 19 ' 22 ' 2009 ' 2019 ' 1991 ' 28 ' 31 |
5. Deserialize – String List
The example below demonstrates the use of ‘Utils.Json.Deserialize‘ to deserialize Json to a list of strings.
The optional function parameter allows you to specify the Newtonsoft.Json.JsonSerializerSettings.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
' Deserialize - String List ' Declare Json array of strings Dim namesJson = " [ ""Kenneth"", ""Jennifer"", ""Lynn"", ""Sole"" ] " ' Deserialize from Json to specified type Dim names = Utils.Json.Deserialize(Of List(Of String))(namesJson) ' Display the items For Each item In names Debug.Print($"{item}") Next ' expected output: ' Kenneth ' Jennifer ' Lynn ' Sole |
6. Deserialize – Custom Object List
The example below demonstrates the use of ‘Utils.Json.Deserialize‘ to deserialize Json to a list of objects.
The optional function parameter allows you to specify the Newtonsoft.Json.JsonSerializerSettings.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
' Deserialize - Custom Object List Public Class Part Public Property PartName As String Public Property PartId As Integer End Class ' Declare Json array of objects Dim partsJson = " [ { ""PartName"": ""crank arm"", ""PartId"": 1234 }, { ""PartName"": ""chain ring"", ""PartId"": 1334 }, { ""PartName"": ""regular seat"", ""PartId"": 1434 }, { ""PartName"": ""banana seat"", ""PartId"": 1444 }, { ""PartName"": ""cassette"", ""PartId"": 1534 }, { ""PartName"": ""shift lever"", ""PartId"": 1634 } ] " ' Deserialize from Json to specified type Dim parts = Utils.Json.Deserialize(Of List(Of Part))(partsJson) ' Display the items For Each item In parts Debug.Print($"{item.PartId} - {item.PartName}") Next ' expected output: ' 1234 - crank arm ' 1334 - chain ring ' 1434 - regular seat ' 1444 - banana seat ' 1534 - cassette ' 1634 - shift lever |
7. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 17, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Namespace Global.Utils Namespace Json Public Module modJson ''' <summary> ''' Serializes the specified value to Json ''' </summary> ''' <param name="value">The value to serialize</param> ''' <param name="settings">The Newtonsoft.Json.JsonSerializerSettings used to serialize the object</param> ''' <returns>The value serialized to Json</returns> Public Function Serialize(value As Object _ , Optional settings As Newtonsoft.Json.JsonSerializerSettings = Nothing) As String If settings Is Nothing Then settings = GetDefaultSettings() End If Return Newtonsoft.Json.JsonConvert.SerializeObject(value, settings) End Function ''' <summary> ''' Deserializes the specified value from Json to Object T ''' </summary> ''' <param name="value">The value to deserialize</param> ''' <param name="settings">The Newtonsoft.Json.JsonSerializerSettings used to deserialize the object</param> ''' <returns>The value deserialized to Object T</returns> Public Function Deserialize(Of T)(value As String _ , Optional settings As Newtonsoft.Json.JsonSerializerSettings = Nothing) As T If settings Is Nothing Then settings = GetDefaultSettings() End If Return Newtonsoft.Json.JsonConvert.DeserializeObject(Of T)(value, settings) End Function Private Function GetDefaultSettings() As Newtonsoft.Json.JsonSerializerSettings Static settings As New Newtonsoft.Json.JsonSerializerSettings With { .Formatting = Newtonsoft.Json.Formatting.Indented } Return settings End Function End Module End Namespace End Namespace ' http://programmingnotes.org/ |
8. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 17, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Public Module Program Public Class Part Public Property PartName As String Public Property PartId As Integer End Class Sub Main(args As String()) Try ' Declare array of integers Dim numbers = New Integer() {1987, 19, 22, 2009, 2019, 1991, 28, 31} ' Optional: Create the JsonSerializerSettings with optional settings. Dim settings = New Newtonsoft.Json.JsonSerializerSettings With { .NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore } ' Serialize to Json Dim numbersJson = Utils.Json.Serialize(numbers) ' Display Json Display(numbersJson) Display("") ' Declare list of strings Dim names = New List(Of String) From { "Kenneth", "Jennifer", "Lynn", "Sole" } ' Serialize to Json Dim namesJson = Utils.Json.Serialize(names) ' Display Json Display(namesJson) Display("") ' Declare list of objects Dim parts = New List(Of Part) From { New Part With { .PartName = "crank arm", .PartId = 1234 }, New Part With { .PartName = "chain ring", .PartId = 1334 }, New Part With { .PartName = "regular seat", .PartId = 1434 }, New Part With { .PartName = "banana seat", .PartId = 1444 }, New Part With { .PartName = "cassette", .PartId = 1534 }, New Part With { .PartName = "shift lever", .PartId = 1634 }} ' Serialize to Json Dim partsJson = Utils.Json.Serialize(parts) ' Display Json Display(partsJson) Display("") ' Declare Json array of integers Dim numbersJsonTest = " [ 1987, 19, 22, 2009, 2019, 1991, 28, 31 ] " ' Deserialize from Json to specified type Dim numbersTest = Utils.Json.Deserialize(Of Integer())(numbersJsonTest) ' Display the items For Each item In numbersTest Display($"{item}") Next Display("") ' Declare Json array of strings Dim namesJsonTest = " [ ""Kenneth"", ""Jennifer"", ""Lynn"", ""Sole"" ] " ' Deserialize from Json to specified type Dim namesTest = Utils.Json.Deserialize(Of List(Of String))(namesJsonTest) ' Display the items For Each item In namesTest Display($"{item}") Next Display("") ' Declare Json array of objects Dim partsJsonTest = " [ { ""PartName"": ""crank arm"", ""PartId"": 1234 }, { ""PartName"": ""chain ring"", ""PartId"": 1334 }, { ""PartName"": ""regular seat"", ""PartId"": 1434 }, { ""PartName"": ""banana seat"", ""PartId"": 1444 }, { ""PartName"": ""cassette"", ""PartId"": 1534 }, { ""PartName"": ""shift lever"", ""PartId"": 1634 } ] " ' Deserialize from Json to specified type Dim partsTest = Utils.Json.Deserialize(Of List(Of Part))(partsJsonTest) ' Display the items For Each item In partsTest Display($"{item.PartId} - {item.PartName}") Next Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
VB.NET || How To Serialize & Deserialize XML Using VB.NET

The following is a module with functions which demonstrates how to serialize and deserialize XML using VB.NET.
The following generic functions use System.Xml.Serialization to serialize and deserialize an object.
Note: Don’t forget to include the ‘Utils Namespace‘ before running the examples!
1. Serialize – Integer Array
The example below demonstrates the use of ‘Utils.Xml.Serialize‘ to serialize an integer array to xml.
The optional function parameter allows you to specify the System.Xml.Serialization.XmlRootAttribute.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
' Serialize - Integer Array ' Declare array of integers Dim numbers = New Integer() {1987, 19, 22, 2009, 2019, 1991, 28, 31} ' Optional: Create an XmlRootAttribute overloaded constructor and set its namespace. Dim myXmlRootAttribute = New System.Xml.Serialization.XmlRootAttribute("OverriddenRootElementName") With { .Namespace = "http://www.microsoft.com" } ' Serialize to XML Dim numbersXml = Utils.Xml.Serialize(numbers) ' Display XML Debug.Print(numbersXml) ' expected output: ' <?xml version="1.0"?> ' <ArrayOfInt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> ' <int>1987</int> ' <int>19</int> ' <int>22</int> ' <int>2009</int> ' <int>2019</int> ' <int>1991</int> ' <int>28</int> ' <int>31</int> ' </ArrayOfInt> |
2. Serialize – String List
The example below demonstrates the use of ‘Utils.Xml.Serialize‘ to serialize a list of strings to xml.
The optional function parameter allows you to specify the System.Xml.Serialization.XmlRootAttribute.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
' Serialize - String List ' Declare list of strings Dim names = New List(Of String) From { "Kenneth", "Jennifer", "Lynn", "Sole" } ' Serialize to XML Dim namesXml = Utils.Xml.Serialize(names) ' Display XML Debug.Print(namesXml) ' expected output: ' <?xml version="1.0"?> ' <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> ' <string>Kenneth</string> ' <string>Jennifer</string> ' <string>Lynn</string> ' <string>Sole</string> ' </ArrayOfString> |
3. Serialize – Custom Object List
The example below demonstrates the use of ‘Utils.Xml.Serialize‘ to serialize a list of custom objects to xml.
The optional function parameter allows you to specify the System.Xml.Serialization.XmlRootAttribute.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
' Serialize - Custom Object List <System.Xml.Serialization.XmlRoot(ElementName:="Inventory")> ' Optional Public Class Inventory <System.Xml.Serialization.XmlArray(ElementName:="Parts")> ' Optional Public Property Parts As List(Of Part) End Class Public Class Part <System.Xml.Serialization.XmlElement(ElementName:="PartName")> ' Optional Public Property PartName As String <System.Xml.Serialization.XmlElement(ElementName:="PartId")> ' Optional Public Property PartId As Integer End Class ' Declare list of objects Dim inventory = New Inventory With { .Parts = New List(Of Part) From { New Part With { .PartName = "crank arm", .PartId = 1234 }, New Part With { .PartName = "chain ring", .PartId = 1334 }, New Part With { .PartName = "regular seat", .PartId = 1434 }, New Part With { .PartName = "banana seat", .PartId = 1444 }, New Part With { .PartName = "cassette", .PartId = 1534 }, New Part With { .PartName = "shift lever", .PartId = 1634 }} } ' Serialize to XML Dim inventoryXml = Utils.Xml.Serialize(inventory) ' Display XML Debug.Print(inventoryXml) ' expected output: ' <?xml version="1.0"?> ' <Inventory xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> ' <Parts> ' <Part> ' <PartName>crank arm</PartName> ' <PartId>1234</PartId> ' </Part> ' <Part> ' <PartName>chain ring</PartName> ' <PartId>1334</PartId> ' </Part> ' <Part> ' <PartName>regular seat</PartName> ' <PartId>1434</PartId> ' </Part> ' <Part> ' <PartName>banana seat</PartName> ' <PartId>1444</PartId> ' </Part> ' <Part> ' <PartName>cassette</PartName> ' <PartId>1534</PartId> ' </Part> ' <Part> ' <PartName>shift lever</PartName> ' <PartId>1634</PartId> ' </Part> ' </Parts> ' </Inventory> |
4. Deserialize – Integer Array
The example below demonstrates the use of ‘Utils.Xml.Deserialize‘ to deserialize xml to an integer array.
The optional function parameter allows you to specify the System.Xml.Serialization.XmlRootAttribute.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
' Deserialize - Integer Array ' Declare Xml array of integers Dim numbersXml = $"<?xml version=""1.0""?> <ArrayOfInt xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> <int>1987</int> <int>19</int> <int>22</int> <int>2009</int> <int>2019</int> <int>1991</int> <int>28</int> <int>31</int> </ArrayOfInt> " ' Optional: Create an XmlRootAttribute overloaded constructor and set its namespace. Dim myXmlRootAttribute = New System.Xml.Serialization.XmlRootAttribute("OverriddenRootElementName") With { .Namespace = "http://www.microsoft.com" } ' Deserialize from XML to specified type Dim numbers = Utils.Xml.Deserialize(Of Integer())(numbersXml) ' Display the items For Each item In numbers Debug.Print($"{item}") Next ' expected output: ' 1987 ' 19 ' 22 ' 2009 ' 2019 ' 1991 ' 28 ' 31 |
5. Deserialize – String List
The example below demonstrates the use of ‘Utils.Xml.Deserialize‘ to deserialize xml to a list of strings.
The optional function parameter allows you to specify the System.Xml.Serialization.XmlRootAttribute.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
' Deserialize - String List ' Declare Xml array of strings Dim namesXml = $"<?xml version=""1.0""?> <ArrayOfString xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> <string>Kenneth</string> <string>Jennifer</string> <string>Lynn</string> <string>Sole</string> </ArrayOfString> " ' Deserialize from XML to specified type Dim names = Utils.Xml.Deserialize(Of List(Of String))(namesXml) ' Display the items For Each item In names Debug.Print($"{item}") Next ' expected output: ' Kenneth ' Jennifer ' Lynn ' Sole |
6. Deserialize – Custom Object List
The example below demonstrates the use of ‘Utils.Xml.Deserialize‘ to deserialize xml to a list of objects.
The optional function parameter allows you to specify the System.Xml.Serialization.XmlRootAttribute.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
' Deserialize - Custom Object List <System.Xml.Serialization.XmlRoot(ElementName:="Inventory")> ' Optional Public Class Inventory <System.Xml.Serialization.XmlArray(ElementName:="Parts")> ' Optional Public Property Parts As List(Of Part) End Class Public Class Part <System.Xml.Serialization.XmlElement(ElementName:="PartName")> ' Optional Public Property PartName As String <System.Xml.Serialization.XmlElement(ElementName:="PartId")> ' Optional Public Property PartId As Integer End Class ' Declare Xml array of objects Dim inventoryXml = $"<?xml version=""1.0""?> <Inventory xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""> <Parts> <Part> <PartName>crank arm</PartName> <PartId>1234</PartId> </Part> <Part> <PartName>chain ring</PartName> <PartId>1334</PartId> </Part> <Part> <PartName>regular seat</PartName> <PartId>1434</PartId> </Part> <Part> <PartName>banana seat</PartName> <PartId>1444</PartId> </Part> <Part> <PartName>cassette</PartName> <PartId>1534</PartId> </Part> <Part> <PartName>shift lever</PartName> <PartId>1634</PartId> </Part> </Parts> </Inventory> " ' Deserialize from XML to specified type Dim inventory = Utils.Xml.Deserialize(Of Inventory)(inventoryXml) ' Display the items For Each item In inventory.Parts Debug.Print($"{item.PartId} - {item.PartName}") Next ' expected output: ' 1234 - crank arm ' 1334 - chain ring ' 1434 - regular seat ' 1444 - banana seat ' 1534 - cassette ' 1634 - shift lever |
7. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 16, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Namespace Global.Utils Namespace Xml Public Module modXml ''' <summary> ''' Serializes the specified value to XML ''' </summary> ''' <param name="value">The value to serialize</param> ''' <param name="root">The XmlRootAttribute that represents the XML root element</param> ''' <returns>The value serialized to XML</returns> Public Function Serialize(Of T)(value As T _ , Optional root As System.Xml.Serialization.XmlRootAttribute = Nothing) As String Dim xml = String.Empty Dim type = If(value IsNot Nothing, value.GetType, GetType(T)) Dim serializer = New System.Xml.Serialization.XmlSerializer(type:=type, root:=root) Using stream = New System.IO.MemoryStream serializer.Serialize(stream, value) xml = GetStreamText(stream) End Using Return xml End Function ''' <summary> ''' Deserializes the specified value from XML to Object T ''' </summary> ''' <param name="value">The value to deserialize</param> ''' <param name="root">The XmlRootAttribute that represents the XML root element</param> ''' <returns>The value deserialized to Object T</returns> Public Function Deserialize(Of T)(value As String _ , Optional root As System.Xml.Serialization.XmlRootAttribute = Nothing) As T Dim obj As T = Nothing Dim serializer = New System.Xml.Serialization.XmlSerializer(type:=GetType(T), root:=root) Using stringReader = New System.IO.StringReader(value) Using xmlReader = System.Xml.XmlReader.Create(stringReader) obj = CType(serializer.Deserialize(xmlReader), T) End Using End Using Return obj End Function Public Function GetStreamText(stream As System.IO.Stream) As String Try TryResetPosition(stream) Dim stmReader = New System.IO.StreamReader(stream) Dim text = stmReader.ReadToEnd Return text Catch ex As Exception Throw Finally TryResetPosition(stream) End Try End Function Private Sub TryResetPosition(stream As System.IO.Stream) If stream.CanSeek Then stream.Position = 0 End If End Sub End Module End Namespace End Namespace ' http://programmingnotes.org/ |
8. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 16, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Public Module Program <System.Xml.Serialization.XmlRoot(ElementName:="Inventory")> ' Optional Public Class Inventory <System.Xml.Serialization.XmlArray(ElementName:="Parts")> ' Optional Public Property Parts As List(Of Part) End Class Public Class Part Public Property PartName As String Public Property PartId As Integer End Class Sub Main(args As String()) Try ' Declare array of integers Dim numbers = New Integer() {1987, 19, 22, 2009, 2019, 1991, 28, 31} ' Create an XmlRootAttribute overloaded constructor and set its namespace. Dim myXmlRootAttribute = New System.Xml.Serialization.XmlRootAttribute("OverriddenRootElementName") With { .Namespace = "http://www.microsoft.com" } ' Serialize to XML Dim numbersXml = Utils.Xml.Serialize(numbers) ' Display XML Display(numbersXml) Display("") ' Declare list of strings Dim names = New List(Of String) From { "Kenneth", "Jennifer", "Lynn", "Sole" } ' Serialize to XML Dim namesXml = Utils.Xml.Serialize(names) ' Display XML Display(namesXml) Display("") ' Declare list of objects Dim inventory = New Inventory With { .Parts = New List(Of Part) From { New Part With { .PartName = "crank arm", .PartId = 1234 }, New Part With { .PartName = "chain ring", .PartId = 1334 }, New Part With { .PartName = "regular seat", .PartId = 1434 }, New Part With { .PartName = "banana seat", .PartId = 1444 }, New Part With { .PartName = "cassette", .PartId = 1534 }, New Part With { .PartName = "shift lever", .PartId = 1634 }} } ' Serialize to XML Dim inventoryXml = Utils.Xml.Serialize(inventory) ' Display XML Display(inventoryXml) Display("") ' Declare Xml array of integers Dim numbersXmlTest = $"<?xml version=""1.0""?> <ArrayOfInt xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> <int>1987</int> <int>19</int> <int>22</int> <int>2009</int> <int>2019</int> <int>1991</int> <int>28</int> <int>31</int> </ArrayOfInt> " ' Deserialize from XML to specified type Dim numbersTest = Utils.Xml.Deserialize(Of Integer())(numbersXmlTest) ' Display the items For Each item In numbersTest Display($"{item}") Next Display("") ' Declare Xml array of strings Dim namesXmlTest = $"<?xml version=""1.0""?> <ArrayOfString xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> <string>Kenneth</string> <string>Jennifer</string> <string>Lynn</string> <string>Sole</string> </ArrayOfString> " ' Deserialize from XML to specified type Dim namesTest = Utils.Xml.Deserialize(Of List(Of String))(namesXmlTest) ' Display the items For Each item In namesTest Display($"{item}") Next Display("") ' Declare Xml array of objects Dim inventoryXmlTest = $"<?xml version=""1.0""?> <Inventory xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""> <Parts> <Part> <PartName>crank arm</PartName> <PartId>1234</PartId> </Part> <Part> <PartName>chain ring</PartName> <PartId>1334</PartId> </Part> <Part> <PartName>regular seat</PartName> <PartId>1434</PartId> </Part> <Part> <PartName>banana seat</PartName> <PartId>1444</PartId> </Part> <Part> <PartName>cassette</PartName> <PartId>1534</PartId> </Part> <Part> <PartName>shift lever</PartName> <PartId>1634</PartId> </Part> </Parts> </Inventory> " ' Deserialize from XML to specified type Dim inventoryTest = Utils.Xml.Deserialize(Of Inventory)(inventoryXmlTest) ' Display the items For Each item In inventoryTest.Parts Display($"{item.PartId} - {item.PartName}") Next Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
VB.NET || How To Split & Batch An Array/List/IEnumerable Into Smaller Sub-Lists Of N Size Using VB.NET

The following is a module with functions which demonstrates how to split/batch an Array/List/IEnumerable into smaller sublists of n size using VB.NET.
This generic extension function uses a simple for loop to group items into batches.
1. Partition – Integer Array
The example below demonstrates the use of ‘Utils.Partition‘ to group an integer array.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
' Partition - Integer Array Imports Utils ' Declare array of integers Dim numbers = New Integer() {1987, 19, 22, 2009, 2019, 1991, 28, 31} ' Split array into sub groups Dim numbersPartition = numbers.Partition(3) ' Display grouped batches For batchCount = 0 To numbersPartition.Count - 1 Dim batch = numbersPartition(batchCount) Debug.Print($"Batch #{batchCount + 1}") For Each item In batch Debug.Print($" Item: {item}") Next Next ' expected output: ' Batch #1 ' Item: 1987 ' Item: 19 ' Item: 22 ' Batch #2 ' Item: 2009 ' Item: 2019 ' Item: 1991 ' Batch #3 ' Item: 28 ' Item: 31 |
2. Partition – String List
The example below demonstrates the use of ‘Utils.Partition‘ to group a list of strings.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
' Partition - String List Imports Utils ' Declare list of strings Dim names = New List(Of String) From { "Kenneth", "Jennifer", "Lynn", "Sole" } ' Split array into sub groups Dim namesPartition = names.Partition(2) ' Display grouped batches For batchCount = 0 To namesPartition.Count - 1 Dim batch = namesPartition(batchCount) Debug.Print($"Batch #{batchCount + 1}") For Each item In batch Debug.Print($" Item: {item}") Next Next ' expected output: ' Batch #1 ' Item: Kenneth ' Item: Jennifer ' Batch #2 ' Item: Lynn ' Item: Sole |
3. Partition – Custom Object List
The example below demonstrates the use of ‘Utils.Partition‘ to group a list of custom objects.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
' Partition - Custom Object List Imports Utils Public Class Part Public Property PartName As String Public Property PartId As Integer End Class ' Declare list of objects Dim parts = New List(Of Part) From { New Part With { .PartName = "crank arm", .PartId = 1234 }, New Part With { .PartName = "chain ring", .PartId = 1334 }, New Part With { .PartName = "regular seat", .PartId = 1434 }, New Part With { .PartName = "banana seat", .PartId = 1444 }, New Part With { .PartName = "cassette", .PartId = 1534 }, New Part With { .PartName = "shift lever", .PartId = 1634 }} ' Split array into sub groups Dim partsPartition = parts.Partition(4) ' Display grouped batches For batchCount = 0 To partsPartition.Count - 1 Dim batch = partsPartition(batchCount) Debug.Print($"Batch #{batchCount + 1}") For Each item In batch Debug.Print($" Item: {item.PartId} - {item.PartName}") Next Next ' expected output: ' Batch #1 ' Item: 1234 - crank arm ' Item: 1334 - chain ring ' Item: 1434 - regular seat ' Item: 1444 - banana seat ' Batch #2 ' Item: 1534 - cassette ' Item: 1634 - shift lever |
4. Utils Namespace
The following is the Utils Namespace. Include this in your project to start using!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 15, 2020 ' Taken From: http://programmingnotes.org/ ' File: Utils.vb ' Description: Handles general utility functions ' ============================================================================ Option Strict On Option Explicit On Namespace Global.Utils Public Module modUtils ''' <summary> ''' Breaks a list into smaller sub-lists of a specified size ''' </summary> ''' <param name="source">An IEnumerable to split into smaller sub-lists</param> ''' <param name="size">The maximum size of each sub-list</param> ''' <returns>The smaller sub-lists of the specified size</returns> <Runtime.CompilerServices.Extension()> Public Function Partition(Of T)(source As IEnumerable(Of T), size As Integer) As List(Of List(Of T)) Dim result = New List(Of List(Of T)) Dim batch As List(Of T) = Nothing For index = 0 To source.Count - 1 If index Mod size = 0 Then batch = New List(Of T) result.Add(batch) End If batch.Add(source(index)) Next Return result End Function End Module End Namespace ' http://programmingnotes.org/ |
5. More Examples
Below are more examples demonstrating the use of the ‘Utils‘ Namespace. Don’t forget to include the module when running the examples!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
' ============================================================================ ' Author: Kenneth Perkins ' Date: Nov 15, 2020 ' Taken From: http://programmingnotes.org/ ' File: Program.vb ' Description: The following demonstrates the use of the Utils Namespace ' ============================================================================ Option Strict On Option Explicit On Imports System Imports Utils Public Module Program Public Class Part Public Property PartName As String Public Property PartId As Integer End Class Sub Main(args As String()) Try ' Declare array of integers Dim numbers = New Integer() {1987, 19, 22, 2009, 2019, 1991, 28, 31} ' Split array into sub groups Dim numbersPartition = numbers.Partition(3) ' Display grouped batches For batchCount = 0 To numbersPartition.Count - 1 Dim batch = numbersPartition(batchCount) Display($"Batch #{batchCount + 1}") For Each item In batch Display($" Item: {item}") Next Next Display("") ' Declare list of strings Dim names = New List(Of String) From { "Kenneth", "Jennifer", "Lynn", "Sole" } ' Split array into sub groups Dim namesPartition = names.Partition(2) ' Display grouped batches For batchCount = 0 To namesPartition.Count - 1 Dim batch = namesPartition(batchCount) Display($"Batch #{batchCount + 1}") For Each item In batch Display($" Item: {item}") Next Next Display("") ' Declare list of objects Dim parts = New List(Of Part) From { New Part With { .PartName = "crank arm", .PartId = 1234 }, New Part With { .PartName = "chain ring", .PartId = 1334 }, New Part With { .PartName = "regular seat", .PartId = 1434 }, New Part With { .PartName = "banana seat", .PartId = 1444 }, New Part With { .PartName = "cassette", .PartId = 1534 }, New Part With { .PartName = "shift lever", .PartId = 1634 }} ' Split array into sub groups Dim partsPartition = parts.Partition(4) ' Display grouped batches For batchCount = 0 To partsPartition.Count - 1 Dim batch = partsPartition(batchCount) Display($"Batch #{batchCount + 1}") For Each item In batch Display($" Item: {item.PartId} - {item.PartName}") Next Next Catch ex As Exception Display(ex.ToString) Finally Console.ReadLine() End Try End Sub Public Sub Display(message As String) Console.WriteLine(message) Debug.Print(message) End Sub End Module ' http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.