/// <inheritdoc/>
        public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
        {
            var result = fromFudgeMsgMethod.Invoke(null, new object[] { msg, deserializer });

            deserializer.Register(msg, result);
            return(result);
        }
Beispiel #2
0
        public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
        {
            var ret = DeserializeImpl(msg, deserializer);

            deserializer.Register(msg, ret);
            return(ret);
        }
Beispiel #3
0
            public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
            {
                var deserialize = Enum.Parse(typeof(SurrogateEnumTest), msg.GetString(1));

                deserializer.Register(msg, deserialize);
                return(deserialize);
            }
        /// <inheritdoc/>
        public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
        {
            IFudgeSerializable result = (IFudgeSerializable)constructor.Invoke(null);

            deserializer.Register(msg, result);
            result.Deserialize(msg, deserializer);
            return(result);
        }
 public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
 {
     var address = new Address(msg.GetString("line1"),
                               msg.GetString("line2"),
                               msg.GetString("zip"));
     deserializer.Register(msg, address);
     return address;
 }
            public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
            {
                var address = new Address(msg.GetString("line1"),
                                          msg.GetString("line2"),
                                          msg.GetString("zip"));

                deserializer.Register(msg, address);
                return(address);
            }
Beispiel #7
0
        /// <inheritdoc/>
        public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
        {
            object newObj = constructor.Invoke(null);

            // Register now in case any cycles in the object graph
            deserializer.Register(msg, newObj);

            helper.Deserialize(msg, deserializer, newObj);

            return(newObj);
        }
Beispiel #8
0
            /// <summary>
            /// Creates the object without calling a constructor, registers it, and deserializes the message into it
            /// </summary>
            /// <param name="msg"></param>
            /// <param name="deserializer"></param>
            /// <returns>Deserialized object</returns>
            public object CreateAndDeserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
            {
                // Create without construction
                object newObj = FormatterServices.GetUninitializedObject(typeData.Type);

                // Register now in case any cycles in the object graph
                deserializer.Register(msg, newObj);

                // Deserialize the message
                Deserialize(msg, deserializer, newObj);

                // And we're done
                return(newObj);
            }
Beispiel #9
0
        private object DeserializeList <T>(IFudgeFieldContainer msg, IFudgeDeserializer deserializer) where T : class
        {
            var result = new List <T>(msg.GetNumFields());

            deserializer.Register(msg, result);
            foreach (var field in msg)
            {
                if (field.Ordinal == null && field.Name == null)
                {
                    result.Add(DeserializeField <T>(field, deserializer, typeData.SubTypeData.Kind));
                }
            }
            return(result);
        }
        public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer, Action<object, SerializationInfo, StreamingContext> deserializeMethod)
        {
            // Create without construction and register before we call the constructor in case there are any cycles
            object result = FormatterServices.GetUninitializedObject(type);
            deserializer.Register(msg, result);

            var converter = new DeserializingFormatterConverter(deserializer);
            var si = new SerializationInfo(this.type, converter);
            PopulateSerializationInfo(si, msg);

            beforeAfterMixin.CallBeforeDeserialize(result);
            deserializeMethod(result, si, streamingContext);
            beforeAfterMixin.CallAfterDeserialize(result);

            return result;
        }
            public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer, Action <object, SerializationInfo, StreamingContext> deserializeMethod)
            {
                // Create without construction and register before we call the constructor in case there are any cycles
                object result = FormatterServices.GetUninitializedObject(type);

                deserializer.Register(msg, result);

                var converter = new DeserializingFormatterConverter(deserializer);
                var si        = new SerializationInfo(this.type, converter);

                PopulateSerializationInfo(si, msg);

                beforeAfterMethodHelper.CallBeforeDeserialize(result);
                deserializeMethod(result, si, streamingContext);
                beforeAfterMethodHelper.CallAfterDeserialize(result);

                return(result);
            }
        /// <inheritdoc/>
        public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
        {
            // We create the new object without constructing it, so we can register it before trying
            // to deserialize the parameters.  This allows us to support cycles.
            object result = FormatterServices.GetUninitializedObject(type);

            deserializer.Register(msg, result);

            var args = new object[constructorParams.Length];

            foreach (var field in msg)
            {
                if (field.Name != null)
                {
                    string name = field.Name.ToLower();

                    for (int i = 0; i < constructorParams.Length; i++)
                    {
                        var constructorParam = constructorParams[i];
                        if (constructorParam.LowerName == name)
                        {
                            switch (constructorParam.Kind)
                            {
                            case TypeData.TypeKind.FudgePrimitive:
                                args[i] = context.TypeHandler.ConvertType(field.Value, constructorParam.TypeData.Type);;
                                break;

                            default:
                                args[i] = deserializer.FromField(field, constructorParam.TypeData.Type);
                                break;
                            }
                            break;
                        }
                    }
                }
            }

            constructor.Invoke(result, args);
            return(result);
        }
Beispiel #13
0
        private object DeserializeDictionary <K, V>(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
            where K : class
            where V : class
        {
            var result = new Dictionary <K, V>(msg.GetNumFields());

            deserializer.Register(msg, result);

            var keys   = new List <K>();
            var values = new List <V>();

            foreach (var field in msg)
            {
                if (field.Ordinal == 1)
                {
                    keys.Add(DeserializeField <K>(field, deserializer, typeData.SubTypeData.Kind));
                }
                else if (field.Ordinal == 2)
                {
                    values.Add(DeserializeField <V>(field, deserializer, typeData.SubType2Data.Kind));
                }
                else if (field.Ordinal == -1 || field.Ordinal == -2)
                {
                    //TODO should be able to use these type hints to read non-generic maps like FRJ-81
                }
                else
                {
                    throw new FudgeRuntimeException("Sub-message doesn't contain a map (bad field " + field + ")");
                }
            }

            int nVals = Math.Min(keys.Count, values.Count);         // Consistent with Java implementation, rather than throwing an exception if they don't match

            for (int i = 0; i < nVals; i++)
            {
                result[keys[i]] = values[i];
            }

            return(result);
        }
Beispiel #14
0
        private object DeserializeArray <T>(IFudgeFieldContainer msg, IFudgeDeserializer deserializer) where T : class
        {
            var result = new T[msg.GetNumFields()];

            deserializer.Register(msg, result);

            int index = 0;

            foreach (var field in msg)
            {
                if (field.Ordinal == null && field.Name == null)
                {
                    result[index++] = DeserializeField <T>(field, deserializer, typeData.SubTypeData.Kind);
                }
                else
                {
                    //See FRN-92
                    throw new FudgeRuntimeException("Unexpected element (bad field " + field + ")");
                }
            }
            return(result);
        }
        /// <inheritdoc/>
        public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
        {
            // We create the new object without constructing it, so we can register it before trying
            // to deserialize the parameters.  This allows us to support cycles.
            object result = FormatterServices.GetUninitializedObject(type);
            deserializer.Register(msg, result);

            var args = new object[constructorParams.Length];
            foreach (var field in msg)
            {
                if (field.Name != null)
                {
                    string name = field.Name.ToLower();

                    for (int i = 0; i < constructorParams.Length; i++)
                    {
                        var constructorParam = constructorParams[i];
                        if (constructorParam.LowerName == name)
                        {
                            switch (constructorParam.Kind)
                            {
                                case TypeData.TypeKind.FudgePrimitive:
                                    args[i] = context.TypeHandler.ConvertType(field.Value, constructorParam.TypeData.Type); ;
                                    break;
                                default:
                                    args[i] = deserializer.FromField(field, constructorParam.TypeData.Type);
                                    break;
                            }
                            break;
                        }
                    }
                }
            }

            constructor.Invoke(result, args);
            return result;
        }
 /// <inheritdoc/>
 public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
 {
     var result = fromFudgeMsgMethod.Invoke(null, new object[] { msg, deserializer });
     deserializer.Register(msg, result);
     return result;
 }
 /// <inheritdoc/>
 public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
 {
     IFudgeSerializable result = (IFudgeSerializable)constructor.Invoke(null);
     deserializer.Register(msg, result);
     result.Deserialize(msg, deserializer);
     return result;
 }
 public object Deserialize(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
 {
     var deserialize = Enum.Parse(typeof (SurrogateEnumTest), msg.GetString(1));
     deserializer.Register(msg, deserialize);
     return deserialize;
 }