Пример #1
0
        private void CreateSerializ(object o, Stream stream)
        {
            // Write class description
            foreach (PropertyInfo p in o.GetType().GetProperties())
            {
                if (p.PropertyType == typeof(System.String))
                {
                    ConversionModule.WriteStringTypeProperty(p.Name, (string)(p.GetValue(o, null)), stream);
                }
                else if (p.PropertyType.IsValueType)
                {
                    ConversionModule.WriteValueTypeProperty(p.Name, p.GetValue(o, null), p.PropertyType, stream);
                }
                else
                {
                    object subProperty = p.GetValue(o, null);

                    if (_referenceTable.ContainsKey(subProperty))
                    {
                        short current_id = _referenceTable[subProperty];
                        ConversionModule.WriteRefTypeProperty(p.Name, current_id, stream, TypeConstants.TC_REFERENCE);
                    }
                    else
                    {
                        ConversionModule.WriteRefTypeProperty(p.Name, _objectID, stream, (byte)TypeCode.Object);
                        _referenceTable.Add(subProperty, _objectID);
                        _objectID += 1;
                        CreateSerializ(subProperty, stream);
                    }
                }
            }

            // Write version
            stream.Write(new byte[] { TypeConstants.TC_ENDBLOCKDATA }, 0, 1);
        }
Пример #2
0
        public void Run(T o, Stream stream)
        {
            WriteHeader(stream);

            if (o.GetType().IsValueType)
            {
            }
            else
            {
                ConversionModule.WriteRefTypeProperty(o.GetType().Name, _objectID, stream, (byte)TypeCode.Object);
                _referenceTable.Add(o, _objectID);
                _objectID += 1;
                CreateSerializ(o, stream);
            }
        }