示例#1
0
        public object Deserialize(HessianInputReader reader, HessianSerializationContext context)
        {
            reader.BeginObject();

            if (reader.IsClassDefinition)
            {
                var className       = reader.ReadString();
                var propertiesCount = reader.ReadInt32();

                if (!String.Equals(ClassName, className))
                {
                    throw new HessianSerializerException();
                }

                if (ObjectProperties.Count != propertiesCount)
                {
                    throw new HessianSerializerException();
                }

                for (var index = 0; index < propertiesCount; index++)
                {
                    var propertyName = reader.ReadString();
                    var exists       = ObjectProperties.Any(property => String.Equals(property.PropertyName, propertyName));

                    if (!exists)
                    {
                        throw new HessianSerializerException();
                    }
                }

                context.Classes.Add(ObjectType);

                reader.EndClassDefinition();
            }
            else if (reader.IsInstanceReference)
            {
                var index = reader.ReadInstanceReference();
                return(context.Instances[index]);
            }

            var number   = reader.ReadObjectReference();
            var instance = Activator.CreateInstance(ObjectType);

            context.Instances.Add(instance);

            foreach (var item in ObjectProperties)
            {
                var value = item.Deserialize(reader, context);
                item.Property.SetValue(instance, value);
            }

            reader.EndObject();

            return(instance);
        }
 public object Deserialize(HessianInputReader reader)
 {
     return(reader.ReadString());
 }