Example #1
0
        /// <summary>
        /// Reads the value.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <param name="context">The context.</param>
        /// <returns>System.Object.</returns>
        public object ReadValue(IStreamReader reader, ISerializeContext context)
        {
            object orgValue = sourceTypeItem.ReadValue(reader, context);

            return(converter(orgValue));
        }
Example #2
0
 /// <summary>
 /// Reads the value.
 /// </summary>
 /// <param name="reader">The reader.</param>
 /// <param name="context">The context.</param>
 /// <returns>System.Object.</returns>
 public object ReadValue(IStreamReader reader, ISerializeContext context)
 {
     // read source type to step over unknown data
     return(sourceTypeItem.ReadValue(reader, context));;
 }
Example #3
0
        public object ReadValue(IStreamReader reader, ISerializeContext context)
        {
            byte contentType = reader.ReadUInt8();

            context.Key = this.Name;

            if (contentType == ValueItem.CollectionObjectIdent)
            {
                int count = reader.ReadInt32();

                if (isArray)
                {
                    Array array = Array.CreateInstance(itemType, count);

                    if (isByteArray)
                    {
                        return(reader.ReadBytes(count).ToArray());
                    }
                    else
                    {
                        for (int i = 0; i < count; i++)
                        {
                            context.ArrayIndex = i;
                            var item = itemStructure.ReadValue(reader, context);
                            array.SetValue(item, i);
                        }
                        context.ArrayIndex = null;
                    }
                    return(array);
                }
                else if (implementsIList)
                {
                    IList coll = (IList)TypeService.CreateInstance(targetCollectionType);

                    for (int i = 0; i < count; i++)
                    {
                        context.ArrayIndex = i;
                        var item = itemStructure.ReadValue(reader, context);
                        coll.Add(item);
                    }
                    context.ArrayIndex = null;

                    return(coll);
                }
                else
                {
                    object specialColl = TypeService.CreateInstance(targetCollectionType);

                    for (int i = 0; i < count; i++)
                    {
                        context.ArrayIndex = i;
                        var item = itemStructure.ReadValue(reader, context);
                        specialCollAddMethod.Invoke(specialColl, new object[] { item });
                    }
                    context.ArrayIndex = null;

                    return(specialColl);
                }
            }
            else if (contentType == ValueItem.NullValueIdent)
            {
                return(null);
            }
            else if (contentType == ValueItem.TypeMetaInfo)
            {
                TypeMetaStructure.SkipTypeMetaInfo(reader);
                return(this.ReadValue(reader, context));
            }
            else
            {
                throw new InvalidOperationException($"Type ident {contentType} not expected!");
            }
        }