AjErl.Communication.OutputChannel.Write C# (CSharp) Method

Write() public method

public Write ( object obj ) : void
obj object
return void
        public void Write(object obj)
        {
            if (obj == null)
            {
                this.writer.Write((byte)Types.Null);
                return;
            }

            if (obj is int)
            {
                this.writer.Write((byte)Types.Integer);
                this.writer.Write((int)obj);
                return;
            }

            if (obj is short)
            {
                this.writer.Write((byte)Types.Short);
                this.writer.Write((short)obj);
                return;
            }

            if (obj is long)
            {
                this.writer.Write((byte)Types.Long);
                this.writer.Write((long)obj);
                return;
            }

            if (obj is char)
            {
                this.writer.Write((byte)Types.Character);
                this.writer.Write((char)obj);
                return;
            }

            if (obj is byte)
            {
                this.writer.Write((byte)Types.Byte);
                this.writer.Write((byte)obj);
                return;
            }

            if (obj is double)
            {
                this.writer.Write((byte)Types.Double);
                this.writer.Write((double)obj);
                return;
            }

            if (obj is float)
            {
                this.writer.Write((byte)Types.Single);
                this.writer.Write((float)obj);
                return;
            }

            if (obj is string)
            {
                this.writer.Write((byte)Types.String);
                this.writer.Write((string)obj);
                return;
            }

            if (obj is decimal)
            {
                this.writer.Write((byte)Types.Decimal);
                this.writer.Write((decimal)obj);
                return;
            }

            if (obj is TypeSerializer)
            {
                var ts = (TypeSerializer)obj;
                var props = ts.Properties;
                this.writer.Write((byte)Types.Type);
                this.writer.Write(ts.TypeName);
                this.writer.Write((short)props.Count);

                foreach (var prop in props)
                {
                    this.writer.Write(prop.Name);
                    this.writer.Write((byte)prop.Type);

                    if (prop.Type == Types.Object)
                        this.writer.Write(prop.TypeName);
                }

                return;
            }

            var type = obj.GetType();
            string typename = type.FullName;

            TypeSerializer serializer;

            if (!this.typepositions.ContainsKey(typename))
            {
                serializer = new TypeSerializer(type);
                this.typepositions[typename] = this.serializers.Count;
                this.serializers.Add(serializer);
                this.Write(serializer);
            }
            else
                serializer = this.serializers[this.typepositions[typename]];

            this.writer.Write((byte)Types.Object);
            this.writer.Write((short)this.typepositions[typename]);

            serializer.SerializeObject(obj, this);
        }

Usage Example

示例#1
0
        public void ReadInteger()
        {
            MemoryStream stream = new MemoryStream();
            OutputChannel output = new OutputChannel(new BinaryWriter(stream));
            output.Write(123);
            stream.Seek(0, SeekOrigin.Begin);

            InputChannel channel = new InputChannel(new BinaryReader(stream));

            Assert.AreEqual(123, channel.Read());
        }
All Usage Examples Of AjErl.Communication.OutputChannel::Write