How to get the selected "Lot number" value for the item from the Sales Order Invoice?

I am using the code below to get the specific sales order invoice data in my application. I need to get the selected "Lot number"  for the line item in this order. (attached image).
How should I get the lot value in the code from this sales order invoice?





   try
            {
                var pvx = SageAuthentication.oScript;
                var oSS = SageAuthentication.oSS;

                oSS.InvokeMethod("nSetDate", "S/O", DateTime.Now.ToString("yyyyMMdd"));
                oSS.InvokeMethod("nSetModule", "S/O");

                int TaskID = (int)oSS.InvokeMethod("nLookupTask", "SO_SalesOrder_UI");
                int setProgramTest = (int)oSS.InvokeMethod("nSetProgram", TaskID);

                using (DispatchObject soObject = new DispatchObject(pvx.InvokeMethod("NewObject", "SO_Invoice_bus", oSS.GetObject())))
                {

                    soObject.InvokeMethod("nSetKeyValue", new object[] { "InvoiceNo$", strRefNumber });
                    int check = (int)soObject.InvokeMethod("nSetKey");
                    var data = new object[] { "InvoiceNo$", strRefNumber };
                    int value = (int)soObject.InvokeMethodByRef("nGetRecord", data);
                    var batchNumber = soObject.GetDataObject("BatchNo$");

                    using (DispatchObject so_line = new DispatchObject(soObject.GetProperty("oLines")))
                    {
                        if ((int)soObject.InvokeMethod("nSelectBatch", batchNumber) == 0) throw new ApplicationException((string)soObject.GetProperty("sLastErrorMsg"));
                        if ((int)soObject.InvokeMethod("nSetKeyValue", new object[] { "InvoiceNo$", strRefNumber }) == 0) throw new ApplicationException((string)soObject.GetProperty("sLastErrorMsg"));
                        if ((int)soObject.InvokeMethod("nSetKey") == 0) throw new ApplicationException((string)soObject.GetProperty("sLastErrorMsg"));

                        so_line.InvokeMethod("nMoveFirst");
                        int EOF = (int)so_line.GetProperty("nEOF");
                        do
                        {
                            var salesOrder = new clsInvoice();
                            var InvoiceLineNumber = so_line.GetDataObject("InvoiceNo$");
                            if (InvoiceLineNumber == strRefNumber)
                            {
                                salesOrder.InvoiceNo = InvoiceLineNumber;

                                salesOrder.CustomerNo = soObject.GetDataObject("CustomerNo$");
                                var name = soObject.GetDataObject("oCustomerChild$");
                                salesOrder.OrderDate = TextUtilities.ConvertDate(soObject.GetDataObject("OrderDate$")).ToShortDateString();
                                salesOrder.OrderType = soObject.GetDataObject("OrderType$");

                                salesOrder.BillToName = soObject.GetDataObject("BillToName$");
                                salesOrder.CustomerPONo = soObject.GetDataObject("CustomerPONo$");
                                salesOrder.TermsCode = soObject.GetDataObject("TermsCode$");

                                salesOrder.Salesperson = soObject.GetDataObject("SalesPerson$");

                                salesOrder.TaxableAmt = soObject.GetDataDecimalObject("TaxableAmt");
                                salesOrder.NonTaxableAmt = soObject.GetDataDecimalObject("NonTaxableAmt");
                                salesOrder.FreightAmt = soObject.GetDataDecimalObject("FreightAmt");
                                salesOrder.SalesTaxAmt = soObject.GetDataDecimalObject("SalesTaxAmt");
                                salesOrder.DiscountAmt = soObject.GetDataDecimalObject("DiscountAmt");
                                salesOrder.DepositAmt = soObject.GetDataDecimalObject("DepositAmt");

                                salesOrder.ShipToName = soObject.GetDataObject("ShipToName$");
                                salesOrder.ShipToAddress1 = soObject.GetDataObject("ShipToAddress1$");
                                salesOrder.ShipToAddress2 = soObject.GetDataObject("ShipToAddress2$");
                                salesOrder.ShipToAddress3 = soObject.GetDataObject("ShipToAddress3$");
                                salesOrder.ShipToCity = soObject.GetDataObject("ShipToCity$");
                                salesOrder.ShipToCountry = soObject.GetDataObject("ShipToCountry$");
                                salesOrder.ShipToState = soObject.GetDataObject("ShipToState$");
                                salesOrder.ShipToZip = soObject.GetDataObject("ShipToZipcode$");

                                salesOrder.BillToName = soObject.GetDataObject("BillToName$");
                                salesOrder.BillToAddress1 = soObject.GetDataObject("BillToAddress1$");
                                salesOrder.BillToAddress2 = soObject.GetDataObject("BillToAddress2$");
                                salesOrder.BillToAddress3 = soObject.GetDataObject("BillToAddress3$");
                                salesOrder.BillToCity = soObject.GetDataObject("BillToCity$");
                                salesOrder.BillToCountry = soObject.GetDataObject("BillToCountry$");
                                salesOrder.BillToState = soObject.GetDataObject("BillToState$");
                                salesOrder.BillToZipcode = soObject.GetDataObject("BillToZipcode$");
                                salesOrder.CityStateZip = salesOrder.ShipToCity + "," + salesOrder.ShipToState + "," + salesOrder.ShipToZip;
                                salesOrder.ShipToName = soObject.GetDataObject("ShipToName$");

                                //LotSerialLinesExist
                                salesOrder.LotSerialLinesExist = soObject.GetDataObject("LotSerialLinesExist$");

                                var ItemCode = so_line.GetDataObject("ItemCode$");
                                salesOrder.InvoiceLineItemCode = so_line.GetDataObject("ItemCode$");
                                salesOrder.InvoiceLineDesc = so_line.GetDataObject("ItemCodeDesc$");
                                salesOrder.InvoiceLineUnitOfMeasure = so_line.GetDataObject("UnitOfMeasure$");
                                salesOrder.InvoiceLineQuantity = so_line.GetDataNumericObject("QuantityOrdered");
                                salesOrder.InvoiceLineQuantityShipped = so_line.GetDataNumericObject("QuantityShipped");
                                salesOrder.InvoiceLineUnitPrice = so_line.GetDataDecimalObject("UnitPrice");
                                salesOrder.InvoiceLineCommentText = so_line.GetDataObject("CommentText$");
                                salesOrder.InvoiceLineDiscountPercent = so_line.GetDataNumericObject("LineDiscountPercent");

                                //LotSerialLinesExist
                                salesOrder.Valuation = soObject.GetDataObject("Valuation$");
                                salesOrder.LotSerialFullyDistributed = soObject.GetDataObject("LotSerialFullyDistributed$");

                                salesOrder.LineKey = soObject.GetDataObject("LineKey");

                                using (DispatchObject LotSerial = new DispatchObject(pvx.InvokeMethod("NewObject", "SO_LotSerialHistory_bus", oSS.GetObject())))
                                {
                                    LotSerial.InvokeMethod("nSetKeyValue", new object[] {"InvoiceNo$", InvoiceLineNumber });
                                    int returnValue = (int)LotSerial.InvokeMethod("nFind");
                                    if (returnValue > 0)
                                    {
                                       
                                    }
                                    else
                                    {
                                        int check1 = (int)LotSerial.InvokeMethod("nSetKey");
                                        var data1 = new object[] { "InvoiceNo$", InvoiceLineNumber };
                                        int value1 = (int)LotSerial.InvokeMethodByRef("nGetRecord", data);
                                        var LotNumber = LotSerial.GetDataObject("LotSerialNo$");
                                    }
                                }



                                salesOrder.InvoiceLineTaxClass = so_line.GetDataObject("TaxClass$");
                                salesOrder.InvoiceLineExtensionAmt = so_line.GetDataNumericObject("ExtensionAmt");
                                List<clsInvoice> invoiceList = new List<clsInvoice>();
                                using (DispatchObject Object = new DispatchObject(pvx.InvokeMethod("NewObject", "IM_ItemCost_bus", oSS.GetObject())))
                                {
                                    Object.InvokeMethod("nSetKeyValue", new object[] { "ItemCode$", ItemCode });
                                    int returnValue0 = (int)Object.InvokeMethod("nFind");
                                    if (returnValue0 > 0)
                                    {
                                        int retVal = 0;
                                        var data1 = new object[] { "ItemCode$", "UDF_LOC$" };
                                        retVal = (int)Object.InvokeMethodByRef("oDetail_Object", data1);
                                        salesOrder.LOC = Object.GetDataObject("UDF_LOC$");
                                    }
                                }
                                if (salesOrder.InvoiceLineQuantityShipped != 0)
                                {
                                    alInvoices.Add(salesOrder);
                                }
                            }

                            so_line.InvokeMethod("nMoveNext");
                            EOF = (int)so_line.GetProperty("nEOF");

                        } while (EOF != 1);
                    }
                }

                return alInvoices;
            }
            catch (Exception ex)
            {
                throw;
                return null;
            }