public static byte[] Serializer <T>(this T val) { SdpWriter writer = new SdpWriter(); writer.Pack(val); return(writer.ToBytes()); }
public void Visit(uint tag, string name, bool require, ref IStruct val) { if (val == null) { return; } if (require) { PackHead(tag, SdpPackDataType.SdpPackDataType_StructBegin); val.Visit(this); PackHead(0u, SdpPackDataType.SdpPackDataType_StructEnd); } else { SdpWriter sdp = new SdpWriter(); sdp.PackHead(tag, SdpPackDataType.SdpPackDataType_StructBegin); uint iStartPos = sdp.CurrPos(); val.Visit(sdp); if (iStartPos < sdp.CurrPos()) { sdp.PackHead(0u, SdpPackDataType.SdpPackDataType_StructEnd); WriteRawByte(sdp.ToBytes()); } } }
public static byte[] Serializer <T>(this T val) { SdpWriter writer = new SdpWriter(); var ser = GetSerializer <T>(); if (ser != null) { ser.Write(val, writer, 0, true); } else { Type type = typeof(T); if (type.IsEnum) { writer.VisitEunm(0, null, true, ref val); } else { foreach (var it in type.GetInterfaces()) { if (it == typeof(IDictionary)) { Type[] genericTypes = type.GetGenericArguments(); IDictionary dir = (IDictionary)val; var keySer = GetSerializer(genericTypes[0]); var valSer = GetSerializer(genericTypes[1]); writer.Visit(0, null, true, ref dir, keySer, genericTypes[0], valSer, genericTypes[1]); break; } else if (it == typeof(IList)) { Type[] genericTypes = type.GetGenericArguments(); IList list = (IList)val; var serT = GetSerializer(genericTypes[0]); writer.Visit(0, null, true, ref list, serT, genericTypes[0]); break; } } } } return(writer.ToBytes()); }