// Token: 0x06000260 RID: 608 RVA: 0x000037A6 File Offset: 0x000019A6
 void IProtoSerializer.Write(object value, ProtoWriter dest)
 {
     if (this.recursionCheck)
     {
         ProtoWriter.WriteObject(value, this.key, dest);
         return;
     }
     ProtoWriter.WriteRecursionSafeObject(value, this.key, dest);
 }
Beispiel #2
0
 void IProtoSerializer.Write(object value, ProtoWriter dest)
 {
     if (recursionCheck)
     {
         ProtoWriter.WriteObject(value, key, dest);
     }
     else
     {
         ProtoWriter.WriteRecursionSafeObject(value, key, dest);
     }
 }
Beispiel #3
0
 void IProtoSerializer.Write(ProtoWriter dest, ref ProtoWriter.State state, object value)
 {
     if (recursionCheck)
     {
         ProtoWriter.WriteObject(value, key, dest, ref state);
     }
     else
     {
         ProtoWriter.WriteRecursionSafeObject(value, key, dest, ref state);
     }
 }
Beispiel #4
0
        public void Write(object value, ProtoWriter dest)
        {
            ProtoWriter.ExpectRoot(dest);
            if (_protoCompatibility)
            {
                _serializer.Write(value, dest);
                return;
            }

            int    typeKey;
            object obj;
            int    refKey;
            var    rootToken = ProtoWriter.StartSubItem(null, false, dest);

            ProtoWriter.WriteFieldHeaderBegin(CurrentFormatVersion, dest);
            _serializer.Write(value, dest);
            while (ProtoWriter.TryGetNextLateReference(out typeKey, out obj, out refKey, dest))
            {
                ProtoWriter.WriteFieldHeaderBegin(refKey + 1, dest);
                ProtoWriter.WriteRecursionSafeObject(obj, typeKey, dest);
            }
            ProtoWriter.EndSubItem(rootToken, dest);
        }
Beispiel #5
0
        public void Write(object value, ProtoWriter dest)
        {
            if (_allowNullWireType && value == null)
            {
                ProtoWriter.WriteFieldHeaderComplete(WireType.Null, dest);
                return;
            }

            bool write;
            int  dynamicTypeKey;

            var options = _options;

            if ((options & BclHelpers.NetObjectOptions.WriteAsLateReference) != 0 && !ProtoWriter.CheckIsOnHalfToRecursionDepthLimit(dest))
            {
                options &= ~BclHelpers.NetObjectOptions.WriteAsLateReference;
            }

            SubItemToken token = NetObjectHelpers.WriteNetObject_Start(value, dest, options, out dynamicTypeKey, out write);

            if (write)
            {
                // field header written!
                if ((options & BclHelpers.NetObjectOptions.DynamicType) != 0)
                {
                    if (dynamicTypeKey < 0)
                    {
                        ProtoTypeCode typeCode = HelpersInternal.GetTypeCode(value.GetType());
                        WireType      wireType = HelpersInternal.GetWireType(typeCode, _dataFormatForDynamicBuiltins);
                        if (wireType != WireType.None)
                        {
                            ProtoWriter.WriteFieldHeaderComplete(wireType, dest);
                            if (!ProtoWriter.TryWriteBuiltinTypeValue(value, typeCode, true, dest))
                            {
                                throw new ProtoException("Dynamic type is not a contract-type: " + value.GetType().Name);
                            }
                        }
                        else
                        {
                            throw new ProtoException("Dynamic type is not a contract-type: " + value.GetType().Name);
                        }
                    }
                    else
                    {
                        ProtoWriter.WriteRecursionSafeObject(value, dynamicTypeKey, dest);
                    }
                }
                else
                {
                    if ((options & BclHelpers.NetObjectOptions.WriteAsLateReference) != 0)
                    {
                        _lateReferenceTail.Write(value, dest);
                    }
                    else if (_tail != null)
                    {
                        _tail.Write(value, dest);
                    }
                    else
                    {
                        Debug.Assert(_baseKey >= 0);

                        if (_baseKeySerializer != null)
                        {
                            _baseKeySerializer.Write(value, dest);
                        }
                        else
                        {
                            ProtoWriter.WriteRecursionSafeObject(value, _baseKey, dest);
                        }
                    }
                }
            }
            ProtoWriter.EndSubItem(token, dest);
        }
Beispiel #6
0
 void IProtoSerializer.Write(object value, ProtoWriter dest)
 {
     ProtoWriter.WriteRecursionSafeObject(value, _baseKey, dest);
 }