//public static void Read<TMember>(BitStream stream, ref TMember value, MySerializer<TMember> serializer, MySerializeInfo info) //{ // if (info.IsNullable) // throw new InvalidOperationException("Read does not support nullable"); // if (MySerializer<TMember>.IsClass && info.IsDynamic) // { // MyFactory.GetSerializer(value.GetType()).Read(stream, value, info); // } // else // { // serializer.Read(stream, ref value, info); // } //} public static void Write <TMember>(BitStream stream, ref TMember value, MySerializer <TMember> serializer, MySerializeInfo info) { if (WriteNullable(stream, ref value, info.IsNullable, serializer)) { if (MySerializer <TMember> .IsClass && info.IsDynamic) { var memberType = typeof(TMember); var valueType = value.GetType(); bool writeType = true; if (info.IsDynamicDefault) { writeType = memberType != valueType; stream.WriteBool(writeType); } if (writeType) { stream.WriteDynamicType(memberType, valueType, info.DynamicSerializer); } MyFactory.GetSerializer(value.GetType()).Write(stream, value, info); } else if (MySerializer <TMember> .IsValueType || value.GetType() == typeof(TMember)) { serializer.Write(stream, ref value, info); } else { throw new MySerializeException(MySerializeErrorEnum.DynamicNotAllowed); } } }
public override void Write(Library.Collections.BitStream stream, ref T?value, MySerializeInfo info) { if (value.HasValue) { T val = value.Value; stream.WriteBool(true); m_serializer.Write(stream, ref val, info); } else { stream.WriteBool(false); } }