private void EmitEndSerialization(BoundedStream stream, ValueNode child, LazyBinarySerializationContext lazyContext, EventShuttle eventShuttle) { if (eventShuttle != null && eventShuttle.HasSerializationSubscribers) { eventShuttle.OnMemberSerialized(this, child.Name, child.BoundValue, lazyContext, stream.GlobalPosition, stream.RelativePosition); } }
protected virtual void ObjectSerializeOverride(BoundedStream stream, EventShuttle eventShuttle) { // check to see if we are actually supposed to be a custom serialization. This is a side-effect of // treating all object members as object nodes. In the case of sub-types we could later discover we // are actually a custom node because the specified subtype implements IBinarySerializable. var parent = (TypeNode)TypeNode.Parent; if (_valueType != null && (TypeNode.SubtypeBinding != null || parent.ItemSubtypeBinding != null)) { var typeNode = (ObjectTypeNode)TypeNode; var subType = typeNode.GetSubTypeNode(_valueType); if (subType is CustomTypeNode) { var customValueNode = subType.CreateSerializer((ValueNode)Parent); // this is a little bit of a cheat, but another side-effect of this weird corner case customValueNode.Value = _cachedValue; customValueNode.SerializeOverride(stream, eventShuttle); return; } } var serializableChildren = GetSerializableChildren(); var lazyContext = CreateLazySerializationContext(); foreach (var child in serializableChildren) { // report on serialization start if subscribed if (eventShuttle != null && eventShuttle.HasSerializationSubscribers) { eventShuttle.OnMemberSerializing(this, child.Name, lazyContext, stream.GlobalPosition); } // serialize child child.Serialize(stream, eventShuttle); // report on serialization complete if subscribed if (eventShuttle != null && eventShuttle.HasSerializationSubscribers) { eventShuttle.OnMemberSerialized(this, child.Name, child.BoundValue, lazyContext, stream.GlobalPosition); } } }
protected override void SerializeOverride(IBitStream stream, EventShuttle eventShuttle) { var serializableChildren = GetSerializableChildren(); var serializationContext = CreateSerializationContext(); foreach (var child in serializableChildren) { if (eventShuttle != null) { eventShuttle.OnMemberSerializing(this, child.Name, serializationContext); } child.Serialize(stream, eventShuttle); if (eventShuttle != null) { eventShuttle.OnMemberSerialized(this, child.Name, child.BoundValue, serializationContext); } } }