Ejemplo n.º 1
0
        /// <summary>
        /// Seeks the field by name.
        /// </summary>
        private bool SeekField(string fieldName)
        {
            if (_curRaw)
            {
                throw new BinaryObjectException("Cannot read named fields after raw data is read.");
            }

            if (!_curHdr.HasSchema)
            {
                return(false);
            }

            var actionId = _curStruct.CurStructAction;

            var fieldId = _curStruct.GetFieldId(fieldName);

            if (_curSchema == null || actionId >= _curSchema.Length || fieldId != _curSchema[actionId])
            {
                _curSchemaMap = _curSchemaMap ?? BinaryObjectSchemaSerializer.ReadSchema(Stream, _curPos, _curHdr,
                                                                                         () => _curSchema).ToDictionary();

                _curSchema = null; // read order is different, ignore schema for future reads

                int pos;

                if (!_curSchemaMap.TryGetValue(fieldId, out pos))
                {
                    return(false);
                }

                Stream.Seek(pos + _curPos, SeekOrigin.Begin);
            }

            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Write field ID.
        /// </summary>
        /// <param name="fieldName">Field name.</param>
        /// <param name="fieldTypeId">Field type ID.</param>
        private void WriteFieldId(string fieldName, byte fieldTypeId)
        {
            if (_curRawPos != 0)
            {
                throw new BinaryObjectException("Cannot write named fields after raw data is written.");
            }

            var fieldId = _curStruct.GetFieldId(fieldName, fieldTypeId);

            _schema.PushField(fieldId, _stream.Position - _curPos);
        }