示例#1
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);
        }