I used in one of my application similar on the following methods
#Region "Xrecord Tools"
Public Function cutArray(ByVal ar As String(), ByVal start As String, ByVal fin As String) As String()
Dim n As Integer = Array.IndexOf(ar, start)
Dim m As Integer = Array.IndexOf(ar, fin)
Dim newar() As String = New String(m - n) {}
Dim i As Integer = 0
For k As Integer = n + 1 To m - 1
newar(i) = ar(k)
i += 1
Next
Return newar
End Function
<CommandMethod("DisplayXRecord", "XD", CommandFlags.Modal Or CommandFlags.UsePickSet)> _
Public Sub XdataDisplay()
Dim doc As Document = acApp.DocumentManager.MdiActiveDocument
Dim ed As Editor = doc.Editor
Using tr As Transaction = doc.Database.TransactionManager.StartTransaction
Try
Dim id As ObjectId = ed.GetEntity("Select your thing:").ObjectId
Dim obj As DBObject = DirectCast(tr.GetObject(id, OpenMode.ForWrite), DBObject)
Dim dict As DBDictionary = DirectCast(tr.GetObject(obj.ExtensionDictionary, OpenMode.ForWrite), DBDictionary)
Dim xid As ObjectId = dict.GetAt("Foo_XRec")
Dim xr As Xrecord = DirectCast(tr.GetObject(xid, OpenMode.ForWrite), Xrecord)
Dim buff As ResultBuffer = xr.Data
Dim tv() As TypedValue = buff.AsArray
buff.Dispose()
Dim list As New List(Of String)
For Each tpv As TypedValue In tv
list.Add(tpv.Value)
Next
Dim ar() As String = cutArray(list.ToArray, "Start_Array", "End_Array")
Dim msg As String = ""
For Each st As String In ar
msg = msg & st & vbLf
Next
MsgBox("Foo_XRec: " & vbLf & msg)
tr.Commit()
Catch ex As Autodesk.AutoCAD.Runtime.Exception
Application.ShowAlertDialog(ex.Message & vbLf & ex.StackTrace)
Finally
End Try
End Using
End Sub
<CommandMethod("ArrayToXrecord", "AX", CommandFlags.Modal Or CommandFlags.UsePickSet)> _
Public Sub AddXrecord()
Dim doc As Document = acApp.DocumentManager.MdiActiveDocument
Dim ed As Editor = doc.Editor
Using tr As Transaction = doc.Database.TransactionManager.StartTransaction
Dim id As ObjectId = ed.GetEntity("Select your thing:").ObjectId
Dim obj As DBObject = DirectCast(tr.GetObject(id, OpenMode.ForWrite), DBObject)
obj.CreateExtensionDictionary()
Dim dict As DBDictionary = DirectCast(tr.GetObject(obj.ExtensionDictionary, OpenMode.ForWrite), DBDictionary)
Dim buff As New ResultBuffer
Dim somearray() As String = {"Start_Array", "alpha", "bravo", "charlie", "delta", "End_Array"}
For Each st As String In somearray
buff.Add(New TypedValue(DxfCode.Text, st))
Next
Dim myXRecord As New Xrecord
myXRecord.Data = buff
dict.SetAt("Foo_XRec", myXRecord)
tr.AddNewlyCreatedDBObject(myXRecord, True)
tr.Commit()
End Using
End Sub
#End Region