Ejemplo n.º 1
0
        public static byte[] Serializer <T>(this T val)
        {
            SdpWriter writer = new SdpWriter();

            writer.Pack(val);
            return(writer.ToBytes());
        }
Ejemplo n.º 2
0
 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());
         }
     }
 }
Ejemplo n.º 3
0
        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());
        }