public override byte[] Export() { uint nExportSize = 8; uint nDindex = 0; byte[] retBytes = null; byte[] bytes = null; uint nLen = 0; if (m_Data != null) { for (uint i = 0; i < m_Data.Count; i++) { if (m_Data[i] == null) { continue; } CUniStruct <T> vrItem = (CUniStruct <T>)m_Data[i]; nExportSize += vrItem.ExportSize(); nLen++; } } retBytes = new byte[nExportSize]; CUniStruct <T> .uint2byte((uint)UNISMAG.UNISARRAY, ref retBytes, nDindex); nDindex += 4; CUniStruct <T> .uint2byte((uint)nLen, ref retBytes, nDindex); nDindex += 4; if (m_Data != null) { for (uint i = 0; i < m_Data.Count; i++) { if (m_Data[i] == null) { continue; } CUniStruct <T> vrItem = (CUniStruct <T>)m_Data[i]; bytes = vrItem.Export(); Array.Copy(bytes, 0, retBytes, nDindex, bytes.Length); nDindex += (uint)bytes.Length; } } return(retBytes); }
public uint ExportSize(T srcObj, bool bHavMag) { if (srcObj == null) { return(0); } Type t = srcObj.GetType(); FieldInfo[] fiarr = t.GetFields(); if (fiarr == null) { return(0); } uint nExportSize = 0; if (bHavMag) { nExportSize += 4; } CUniStruct <object> pUnkownObj = new CUniStruct <object>(); uint nCount = (uint)fiarr.GetLength(0); for (uint i = 0; i < nCount; i++) { object poValue = fiarr[i].GetValue(srcObj); Type itt = fiarr[i].FieldType; if ((poValue != null) && ((itt == typeof(UniSZ)) || (itt == typeof(UniDW)))) { UniVarItem puiValue = (UniVarItem)poValue; if (!puiValue.IsValid()) { continue; } } nExportSize += 4; if (poValue == null) { continue; } if (itt == typeof(UniSZ)) { UniSZ pValue = (UniSZ)poValue; if (!pValue.IsEmpty() && !pValue.IsLock()) { nExportSize += pValue.Size(); } } else if (itt == typeof(UniDW)) { UniDW pValue = (UniDW)poValue; if (!pValue.IsEmpty() && !pValue.IsLock()) { nExportSize += 4; } } else { nExportSize -= 4; uint nSize = pUnkownObj.ExportSize(poValue, false); nExportSize += nSize; } } return((uint)nExportSize); }