示例#1
0
        internal override async Task SerializeOverrideAsync(BoundedStream stream, EventShuttle eventShuttle, CancellationToken cancellationToken)
        {
            var childSerializer     = (ValueValueNode)CreateChildSerializer();
            var childSerializedType = childSerializer.TypeNode.GetSerializedType();

            var itemLength = GetConstFieldItemLength();

            var boundValue = BoundValue;

            var count = GetConstFieldCount();

            // handle null value case
            if (boundValue == null)
            {
                if (count != null)
                {
                    var defaultValue = TypeNode.GetDefaultValue(childSerializedType);
                    for (var i = 0; i < count.Value; i++)
                    {
                        await childSerializer
                        .SerializeAsync(stream, defaultValue, childSerializedType, itemLength, cancellationToken)
                        .ConfigureAwait(false);
                    }
                }

                return;
            }

            await PrimitiveCollectionSerializeOverrideAsync(stream, boundValue, childSerializer, childSerializedType, itemLength,
                                                            count, cancellationToken);

            await SerializeTerminationAsync(stream, eventShuttle, cancellationToken);
        }
示例#2
0
        internal override void SerializeOverride(BoundedStream stream, EventShuttle eventShuttle)
        {
            var childSerializer     = (ValueValueNode)CreateChildSerializer();
            var childSerializedType = childSerializer.TypeNode.GetSerializedType();

            var itemLength = GetConstFieldItemLength();

            var boundValue = BoundValue;

            var count = GetConstFieldCount();

            // handle null value case
            if (boundValue == null)
            {
                if (count != null)
                {
                    var defaultValue = TypeNode.GetDefaultValue(childSerializedType);
                    for (var i = 0; i < count.Value; i++)
                    {
                        childSerializer.Serialize(stream, defaultValue, childSerializedType, itemLength);
                    }
                }

                return;
            }

            PrimitiveCollectionSerializeOverride(stream, boundValue, childSerializer, childSerializedType, itemLength,
                                                 count);

            SerializeTermination(stream, eventShuttle);
        }