private void serialize <valueType>(ref valueType value, UnmanagedStream stream, SerializeConfig config) { Config = config ?? DefaultConfig; CharStream.From(stream); try { serialize(ref value); } finally { stream.From(CharStream); } }
/// <summary> /// 序列化 /// </summary> /// <typeparam name="valueType">目标数据类型</typeparam> /// <param name="value">数据对象</param> /// <param name="stream"></param> internal void SerializeTcpServer <valueType>(ref valueType value, UnmanagedStream stream) { //CurrentMemberMap = MemberMap = null; //Warning = SerializeWarning.None; if (isReferenceMember == AutoCSer.BinarySerialize.TypeSerializer <valueType> .IsReferenceMember) { if (points != null) { points.Clear(); } } else if (isReferenceMember) { isReferenceMember = false; } else { isReferenceMember = true; if (points == null) { points = ReusableDictionary <ObjectReference> .Create <int>(); } else { points.Clear(); } } //streamStartIndex = Stream.OffsetLength; streamStartIndex = stream.Data.CurrentIndex; isReferenceArray = true; Config.UnsafeWriteHeader(stream); Stream.From(stream); try { //Warning = SerializeWarning.None; AutoCSer.BinarySerialize.TypeSerializer <valueType> .SerializeTcpServer(this, ref value); } finally { stream.From(Stream); } //Stream.Write(Stream.OffsetLength - streamStartIndex); stream.Write(stream.Data.CurrentIndex - streamStartIndex); }
/// <summary> /// 序列化 /// </summary> /// <typeparam name="valueType"></typeparam> /// <param name="stream"></param> /// <param name="value"></param> internal void SerializeTcpServer <valueType>(ref valueType value, UnmanagedStream stream) //where valueType : struct { int index = stream.Data.CurrentIndex; if (forefatherCount != 0) { System.Array.Clear(forefather, 0, forefatherCount); forefatherCount = 0; } CharStream.From(stream); try { //Warning = SerializeWarning.None; TypeSerializer <valueType> .SerializeTcpServer(this, ref value); } finally { stream.From(CharStream); } if (((stream.Data.CurrentIndex - index) & 2) != 0) { stream.Write(' '); } }