Пример #1
0
        public static VMObject FromBytes(byte[] bytes)
        {
            var result = new VMObject();

            result.UnserializeData(bytes);
            return(result);
        }
Пример #2
0
        public void UnserializeData(BinaryReader reader)
        {
            this.Type = (VMType)reader.ReadByte();
            switch (this.Type)
            {
            case VMType.Bool:
                this.Data = Serialization.Unserialize <bool>(reader);
                break;

            case VMType.Bytes:
                this.Data = Serialization.Unserialize <byte[]>(reader);
                break;

            case VMType.Number:
                this.Data = Serialization.Unserialize <BigInteger>(reader);
                break;

            case VMType.Timestamp:
                this.Data = Serialization.Unserialize <Timestamp>(reader);
                break;

            case VMType.String:
                this.Data = Serialization.Unserialize <string>(reader);
                break;

            case VMType.Struct:
                var childCount = reader.ReadVarInt();
                var children   = new Dictionary <VMObject, VMObject>();
                while (childCount > 0)
                {
                    var key = new VMObject();
                    key.UnserializeData(reader);

                    var val = new VMObject();
                    val.UnserializeData(reader);

                    children[key] = val;
                    childCount--;
                }

                this.Data = children;
                break;

            // NOTE object type information is lost during serialization, so we reconstruct it as byte array
            case VMType.Object:
                this.Type = VMType.Bytes;
                this.Data = reader.ReadByteArray();
                break;

            case VMType.Enum:     // TODO
            default:
                throw new Exception($"invalid unserialize: type {this.Type}");
            }
        }
Пример #3
0
 public static VMObject FromBytes(byte[] bytes)
 {
     using (var stream = new MemoryStream(bytes))
     {
         using (var reader = new BinaryReader(stream))
         {
             var result = new VMObject();
             result.UnserializeData(reader);
             return(result);
         }
     }
 }