示例#1
0
        /// <inheritdoc cref="ISerializationElement.Serialize" />
        public void Serialize(HessianOutputWriter writer, object graph, HessianSerializationContext context)
        {
            if (null == graph)
            {
                writer.WriteNull();
                return;
            }

            var index = context.Instances.IndexOf(graph);

            if (index > -1)
            {
                writer.WriteInstanceReference(index);
                return;
            }

            context.Instances.Add(graph);

            index = context.Classes.IndexOf(ObjectType);

            if (0 > index)
            {
            }

            WriteArray(writer, (Array)graph, context);
        }
        /// <inheritdoc cref="ISerializationElement.Serialize" />
        public void Serialize(HessianOutputWriter writer, object graph, HessianSerializationContext context)
        {
            if (null == graph)
            {
                writer.WriteNull();
                return;
            }

            var index = context.Instances.IndexOf(graph);

            if (index > -1)
            {
                writer.WriteInstanceReference(index);
                return;
            }

            context.Instances.Add(graph);

            index = context.Classes.IndexOf(ObjectType);

            if (0 > index)
            {
            }

            using (writer.BeginArray(ObjectType.Name))
            {
                foreach (var item in (IEnumerable)graph)
                {
                    Element.Serialize(writer, item, context);
                }
            }
        }
示例#3
0
        private void WriteArray(HessianOutputWriter writer, Array array, HessianSerializationContext context)
        {
            using (writer.BeginFixedArray(ObjectType.Name, array.Length))
            {
                var index = array.GetLowerBound(0);
                var end   = array.GetUpperBound(0);

                for (; index <= end; index++)
                {
                    var item = array.GetValue(index);
                    Element.Serialize(writer, item, context);
                }
            }
        }
示例#4
0
        public void WriteCall(Stream stream, params object[] arguments)
        {
            if (null == stream)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            var serializationScheme = GetSerializationScheme();

            using (var writer = new HessianOutputWriter(stream))
            {
                var context = new HessianSerializationContext();
                serializationScheme.Serialize(writer, arguments, context);
            }
        }
        /// <summary>
        /// Serializes a specified object to binary data and writes the resulting to a stream.
        /// </summary>
        /// <param name="stream">The <see cref="System.IO.Stream" /> that is written to.</param>
        /// <param name="graph">The object that contains the data to write to the stream.</param>
        public void WriteObject(Stream stream, object graph)
        {
            if (null == stream)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            var factory = new HessianObjectSerializerFactory();
            var scheme  = HessianSerializationScheme.CreateFromType(type, factory);

            using (var writer = new HessianOutputWriter(stream))
            {
                var context = new HessianSerializationContext();
                scheme.Serialize(writer, graph, context);
            }
        }
示例#6
0
        public void Serialize(HessianOutputWriter writer, object graph, HessianSerializationContext context)
        {
            if (null == graph)
            {
                writer.WriteNull();
                return;
            }

            using (writer.BeginCall(MethodInfo.Name))
            {
                var parameters = (Array)graph;

                for (var index = 0; index < Arguments.Count; index++)
                {
                    Arguments[index].Serialize(writer, parameters.GetValue(index), context);
                }
            }

            /*var index = context.Instances.IndexOf(graph);
             *
             * if (index > -1)
             * {
             *  writer.WriteInstanceReference(index);
             *  return;
             * }
             *
             * context.Instances.Add(graph);
             *
             * index = context.Classes.IndexOf(ObjectType);
             *
             * if (0 > index)
             * {
             *
             * }*/

            /*using (writer.BeginArray(ObjectType.Name))
             * {
             *  foreach (var item in (IEnumerable)graph)
             *  {
             *      Element.Serialize(writer, item, context);
             *  }
             * }*/
        }
示例#7
0
        /// <inheritdoc />
        public void Serialize(HessianOutputWriter writer, object graph, HessianSerializationContext context)
        {
            if (null == graph)
            {
                writer.WriteNull();
                return;
            }

            /*var index = context.Instances.IndexOf(graph);
             *
             * if (index > -1)
             * {
             *  writer.WriteInstanceReference(index);
             *  return;
             * }
             *
             * context.Instances.Add(graph);*/

            writer.WriteBytes((byte[])graph);
        }
示例#8
0
        /// <inheritdoc cref="ISerializationElement.Serialize" />
        public void Serialize(HessianOutputWriter writer, object graph, HessianSerializationContext context)
        {
            var index = context.Instances.IndexOf(graph);

            if (index > -1)
            {
                writer.WriteInstanceReference(index);
                return;
            }

            context.Instances.Add(graph);

            index = context.Classes.IndexOf(ObjectType);

            if (0 > index)
            {
                writer.BeginClassDefinition();
                writer.WriteString(ClassName);
                writer.WriteInt32(ObjectProperties.Count);

                foreach (var property in ObjectProperties)
                {
                    writer.WriteString(property.PropertyName);
                }

                writer.EndClassDefinition();

                index = context.Classes.Count;

                context.Classes.Add(ObjectType);
            }

            writer.WriteObjectReference(index);

            foreach (var item in ObjectProperties)
            {
                var value = item.Property.GetPropertyValue(graph);
                item.Serialize(writer, value, context);
            }
        }
示例#9
0
 /// <inheritdoc cref="ISerializationElement.Serialize" />
 public void Serialize(HessianOutputWriter writer, object graph, HessianSerializationContext context)
 {
     Element.Serialize(writer, graph, context);
 }
示例#10
0
 /// <inheritdoc cref="ISerializationElement.Serialize" />
 public void Serialize(HessianOutputWriter writer, object graph, HessianSerializationContext context)
 {
     ObjectSerializer.Serialize(writer, graph);
 }