/// <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)); }
/// <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));; }
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!"); } }