示例#1
0
        public static object Deserialize(MemoryStream stream, Type type)
        {
            BinaryReader reader = new BinaryReader(stream);
            object       o      = Activator.CreateInstance(type);

            FieldInfo[] fields = o.GetType().GetFields();
            foreach (FieldInfo f in fields)
            {
                Type   t = f.FieldType;
                object v = null;
                switch (t.FullName)
                {
                case "System.Boolean":
                    v = reader.ReadBoolean();
                    break;

                case "System.Char":
                    v = reader.ReadChar();
                    break;

                case "System.Byte":
                    v = reader.ReadByte();
                    break;

                case "System.SByte":
                    v = reader.ReadSByte();
                    break;

                case "System.Int16":
                    v = reader.ReadInt16();
                    break;

                case "System.UInt16":
                    v = reader.ReadUInt16();
                    break;

                case "System.Int32":
                    v = reader.ReadInt32();
                    break;

                case "System.UInt32":
                    v = reader.ReadUInt32();
                    break;

                case "System.Int64":
                    v = reader.ReadInt64();
                    break;

                case "System.UInt64":
                    v = reader.ReadUInt64();
                    break;

                case "System.Single":
                    v = reader.ReadSingle();
                    break;

                case "System.Double":
                    v = reader.ReadDouble();
                    break;

                case "System.Decimal":
                    v = reader.ReadDecimal();
                    break;

                case "System.String":
                    v = reader.ReadString();
                    break;

                default:
                    v = XCSharp.Deserialize(stream, t);
                    break;
                }
                f.SetValue(o, v);
            }
            return(o);
        }