Exemplo n.º 1
0
            MakeSerializer_Monsajem_Array()
            {
                var Type            = typeof(t);
                var ItemsSerializer = GetSerialize(System.Array.CreateInstance(
                                                       ((Collection.Array.Base.IArray)GetUninitializedObject(Type)).ElementType, 0).GetType());
                var ObjSerializer = SerializeInfo <object> .GetSerialize();

                Action <SerializeData, object> Serializer = (Data, obj) =>
                {
                    var ar = (Collection.Array.Base.IArray)obj;
                    ObjSerializer.Serializer(Data, ar.Comparer);
                    ObjSerializer.Serializer(Data, ar.MyOptions);
                    ItemsSerializer.Serializer(Data, ar.ToArray());
                };
                Func <DeserializeData, object> Deserializer = (Data) =>
                {
                    var ar = (Collection.Array.Base.IArray)GetUninitializedObject(Type);
                    ar.Comparer  = ObjSerializer.Deserializer(Data);
                    ar.MyOptions = ObjSerializer.Deserializer(Data);
                    ar.Insert((Array)ItemsSerializer.Deserializer(Data));
                    return(ar);
                };

                return(Serializer, Deserializer);
            }
Exemplo n.º 2
0
        private SerializeInfo WriteSerializer(SerializeData Data, Type Type)
        {
            var Sr = SerializeInfo.GetSerialize(Type);

            VisitedInfoSerialize <object>(Data, Sr.Type, () => (Sr.NameAsByte, null));
            return(Sr);
        }
Exemplo n.º 3
0
        private SerializeInfo ReadSerializer(DeserializeData Data)
        {
            var Info = VisitedInfoDeserialize(Data, () =>
            {
                return(Read(Data));
            });

            return(SerializeInfo.GetSerialize(Info));
        }
Exemplo n.º 4
0
        private void VisitedDeserialize(
            DeserializeData Data,
            Action <object> Set,
            SerializeInfo deserializer)
        {
            if (deserializer.ConstantSize > -1)
            {
                Set(deserializer.Deserializer(Data));
                return;
            }
            var LastFrom = Data.From;
            var Fr       = BitConverter.ToInt32(Data.Data, LastFrom);

            Data.From += 4;
            if (deserializer.CanStoreInVisit == false)
            {
                if (Fr == -2)
                {
                    return;
                }
                Set(deserializer.Deserializer(Data));
                return;
            }
            ObjectContainer VisitedObj;

            switch (Fr)
            {
            case -1:
                VisitedObj = new ObjectContainer()
                {
                    HashCode         = LastFrom,
                    IsUniqueHashCode = true
                };
                Data.Visitor.Add(VisitedObj);
                VisitedObj.obj = deserializer.Deserializer(Data);
                Set(VisitedObj.obj);
                return;

            case -2:
                return;
            }
            VisitedObj = new ObjectContainer()
            {
                HashCode         = Fr,
                IsUniqueHashCode = true
            };
            Data.Visitor.TryGetValue(VisitedObj, out VisitedObj);
            if (VisitedObj.obj == null)
            {
                Data.AtLast += () => Set(VisitedObj.obj);
            }
            else
            {
                Set(VisitedObj.obj);
            }
        }
Exemplo n.º 5
0
        private byte[] _Serialize <t>(t obj,
                                      Action <Type> TrustToType,
                                      Action <MethodInfo> TrustToMethod)
        {
            byte[] Result;
            var    SR = SerializeInfo <t> .GetSerialize();

            SerializeData SR_Data = default;

            try
            {
#if DEBUG
                if (Deletage_Target == null)
                {
                    var Fields     = DynamicAssembly.FieldControler.GetFields(typeof(Delegate));
                    var Fields_str = "";
                    for (int i = 0; i < Fields.Length; i++)
                    {
                        Fields_str += "\n" + Fields[i].Name;
                    }
                    throw new Exception("Cant Access to Deletage Target field at serializer, Fields >>" + Fields_str);
                }
#endif
                var ConstantSize = SR.ConstantSize;
                if (ConstantSize == -1)
                {
                    SR_Data = new SerializeData(true, TrustToType, TrustToMethod);
                    VisitedSerialize(SR_Data, obj, SR);
                    Result = SR_Data.Data.ToArray();
                }
                else
                {
                    //return StructToBytes(obj, ConstantSize);
                    SR_Data = new SerializeData(false, TrustToType, TrustToMethod,
                                                new MemoryStream(ConstantSize));
                    SR.Serializer(SR_Data, obj);
                    Result = SR_Data.Data.ToArray();
                }
            }
#if DEBUG
            catch (Exception ex)
            {
                var Traced = SR_Data.Traced;
                if (Traced != null)
                {
                    Traced = "On " + Traced;
                }
                SR_Data.Traced = null;
                throw new Exception($"Serialize Of Type >> {obj.GetType().FullName} Is Failed " + Traced, ex);
            }
#endif
            finally { }
            return(Result);
        }
Exemplo n.º 6
0
        private void VisitedSerialize(
            SerializeData Data,
            object obj,
            SerializeInfo serializer)
        {
            if (serializer.ConstantSize > -1)
            {
                serializer.Serializer(Data, obj);
                return;
            }
            var BytesData = Data.Data;

            if (obj == null)
            {
                BytesData.Write(Byte_Int_N_2, 0, 4);
                return;
            }
            if (serializer.CanStoreInVisit == false)
            {
                BytesData.Write(Byte_Int_N_1, 0, 4);
                serializer.Serializer(Data, obj);
                return;
            }
            var Key = new ObjectContainer()
            {
                HashCode = obj.GetHashCode(),
                obj      = obj
            };
            var Visitor = Data.Visitor;

            if (Visitor.TryGetValue(Key, out var VisitedObj) == false)
            {
                Visitor.Add(Key);
#if DEBUG
                Key.obj = obj;
#endif
                Key.FromPos = (int)BytesData.Position;
                BytesData.Write(Byte_Int_N_1, 0, 4);
                serializer.Serializer(Data, obj);
            }
            else
            {
#if DEBUG
                if (VisitedObj.obj.GetType() != obj.GetType())
                {
                    throw new Exception("Type of visited object is wrong" +
                                        "\n\nMain: " + obj.GetType().ToString() +
                                        "\n\nVisited: " + VisitedObj.obj.GetType().ToString());
                }
#endif
                BytesData.Write(BitConverter.GetBytes(VisitedObj.FromPos), 0, 4);
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// 開始序列化
        /// </summary>
        /// <param name="Obj"></param>
        /// <returns></returns>
        public SerializeInfo Start(object Obj)
        {
            XmlDocument doc = null;

            XmlSerializer ser = null;

            StringBuilder sb = null;

            SerializeInfo info = new SerializeInfo();

            try
            {
                ser = new XmlSerializer(Obj.GetType());

                sb = new StringBuilder();

                using (StringWriter writer = new StringWriter(sb))
                {
                    ser.Serialize(writer, Obj);

                    doc = new XmlDocument();

                    doc.LoadXml(sb.ToString());

                    info.XmlDoc = doc;

                    info.Body = doc.ChildNodes[1].ChildNodes[0].InnerText;
                }
            }
            catch (System.Exception ex)
            {
                info.Message = "[Serialize.Start][" + ex.ToString() + "]";
            }
            finally
            {
                if (ser != null)
                {
                    ser = null;
                }

                if (doc != null)
                {
                    doc = null;
                }

                if (sb != null)
                {
                    sb = null;
                }
            }
            return(info);
        }
Exemplo n.º 8
0
        public t Deserialize <t>(byte[] Data, ref int From,
                                 Action <Type> TrustToType,
                                 Action <MethodInfo> TrustToMethod)
        {
            t   Result = default;
            var SR     = SerializeInfo <t> .GetSerialize();

            DeserializeData DR_Data = default;

            try
            {
#if DEBUG
                if (Deletage_Target == null)
                {
                    var Fields     = DynamicAssembly.FieldControler.GetFields(typeof(Delegate));
                    var Fields_str = "";
                    for (int i = 0; i < Fields.Length; i++)
                    {
                        Fields_str += "\n" + Fields[i].Name;
                    }
                    throw new Exception("Cant Access to Deletage Target field at serializer, Fields >>" + Fields_str);
                }
#endif
                if (SR.ConstantSize == -1)
                {
                    DR_Data = new DeserializeData(true, TrustToType, TrustToMethod, Data);
                    VisitedDeserialize(DR_Data, (c) => Result = (t)c, SR);
                    DR_Data.AtLast?.Invoke();
                }
                else
                {
                    //return BytesToStruct<t>(Data, 0);
                    DR_Data = new DeserializeData(false, TrustToType, TrustToMethod, Data);
                    Result  = (t)SR.Deserializer(DR_Data);
                }
            }
#if DEBUG
            catch (Exception ex)
            {
                var Traced = DR_Data.Traced;
                if (Traced != null)
                {
                    Traced = "On " + Traced;
                }
                DR_Data.Traced = null;
                throw new Exception($"Deserialize From Point {DR_Data.From} Of Type >> {typeof(t).FullName} Is Failed {Traced}\nDatas As B64:\n" + System.Convert.ToBase64String(Data), ex);
            }
#endif
            finally { }
            return(Result);
        }
        private void VisitedDeserialize(
            Action <object> Set,
            SerializeInfo deserializer)
        {
            var LastFrom = From;
            var Fr       = BitConverter.ToInt32(D_Data, From);

            From += 4;
            if (deserializer.CanStoreInVisit == false)
            {
                if (Fr == -2)
                {
                    return;
                }
                Set(deserializer.Deserializer());
                return;
            }
            ObjectContainer VisitedObj;

            switch (Fr)
            {
            case -1:
                VisitedObj = new ObjectContainer()
                {
                    ObjHashCode = LastFrom
                };
                Visitor.BinaryInsert(VisitedObj);
                VisitedObj.obj = deserializer.Deserializer();
                Set(VisitedObj.obj);
                return;

            case -2:
                return;
            }
            VisitedObj = new ObjectContainer()
            {
                ObjHashCode = Fr
            };
            VisitedObj = Visitor.BinarySearch(VisitedObj).Value;
            if (VisitedObj.obj == null)
            {
                AtLast += () => Set(VisitedObj.obj);
            }
            else
            {
                Set(VisitedObj.obj);
            }
        }
        private void VisitedSerialize(
            object obj,
            SerializeInfo serializer)
        {
            if (obj == null)
            {
                S_Data.Write(Byte_Int_N_2, 0, 4);
                return;
            }
            if (serializer.CanStoreInVisit == false)
            {
                S_Data.Write(Byte_Int_N_1, 0, 4);
                serializer.Serializer(obj);
                return;
            }
            var VisitedObj = new ObjectContainer()
            {
                ObjHashCode  = obj.GetHashCode(),
                TypeHashCode = serializer.TypeHashCode
            };
            var VisitedPos = Visitor.BinaryInsert(ref VisitedObj);

            if (VisitedPos > -1)
            {
#if DEBUG
                if (VisitedObj.obj.GetType() != obj.GetType())
                {
                    throw new Exception("Type of visited object is wrong" +
                                        "\nMain: " + obj.GetType().ToString() +
                                        "\nVisited: " + VisitedObj.obj.GetType().ToString());
                }
#endif
                S_Data.Write(BitConverter.GetBytes(VisitedObj.FromPos), 0, 4);
                return;
            }
#if DEBUG
            VisitedObj.obj = obj;
#endif
            VisitedObj.FromPos = (int)S_Data.Position;
            S_Data.Write(Byte_Int_N_1, 0, 4);
            serializer.Serializer(obj);
        }
Exemplo n.º 11
0
        private byte[] _Serialize <t>(t obj, Action <Type> TrustToType)
        {
            byte[] Result;
            var    SR = SerializeInfo <t> .GetSerialize();

            var SR_Data = new SerializeData()
            {
                Trust = TrustToType
            };

            try
            {
#if DEBUG
                if (Deletage_Target == null)
                {
                    var Fields     = DynamicAssembly.FieldControler.GetFields(typeof(Delegate));
                    var Fields_str = "";
                    for (int i = 0; i < Fields.Length; i++)
                    {
                        Fields_str += "\n" + Fields[i].Name;
                    }
                    throw new Exception("Cant Access to Deletage Target field at serializer, Fields >>" + Fields_str);
                }
#endif
                VisitedSerialize(SR_Data, obj, SR);
                Result = SR_Data.S_Data.ToArray();
            }
#if DEBUG
            catch (Exception ex)
            {
                var Traced = SR_Data.Traced;
                if (Traced != null)
                {
                    Traced = "On " + Traced;
                }
                SR_Data.Traced = null;
                throw new Exception($"Serialize Of Type >> {obj.GetType().FullName} Is Failed " + Traced, ex);
            }
#endif
            finally { }
            return(Result);
        }
Exemplo n.º 12
0
        /// <summary>
        /// Read <see cref="SerializeInfo"/> context to the current object include the body and properties using <see cref="SerializeInfo"/>.
        /// </summary>
        /// <param name="context"></param>
        void ReadContext(SerializeInfo info)
        {
            MessageState = (MessageState)info.GetValue <byte>("MessageState");
            MessageType  = (MQTypes)info.GetValue <byte>("MessageType");
            Command      = (QueueCmd)info.GetValue <byte>("Command");
            Priority     = (Priority)info.GetValue <byte>("Priority");
            Identifier   = info.GetValue <string>("Identifier");
            Retry        = info.GetValue <byte>("Retry");
            ArrivedTime  = info.GetValue <DateTime>("ArrivedTime");
            //SentTime = info.GetValue<DateTime>("SentTime");
            Modified   = info.GetValue <DateTime>("Modified");
            Expiration = info.GetValue <int>("Expiration");
            //MessageId = info.GetValue<int>("MessageId");
            TransformType = (TransformTypes)info.GetValue <byte>("TransformType");
            Destination   = info.GetValue <string>("Destination");
            //Label = info.GetValue<string>("Label");
            //Sender = info.GetValue<string>("Sender");
            ////Topic = info.GetValue<string>("Topic");
            //HeaderStream = (NetStream)info.GetValue("HeaderStream");

            m_BodyStream = (NetStream)info.GetValue("BodyStream");

            var ns = (NetStream)info.GetValue("ItemBinary");

            ItemBinary = ns.ToArray();

            //if (Command != QueueCmd.Ack)
            //{
            //    Formatter = (Formatters)info.GetValue<int>("Formatter");
            //    m_BodyStream = (NetStream)info.GetValue("BodyStream");
            //    _TypeName = info.GetValue<string>("TypeName");
            //    Segments = info.GetValue<byte>("Segments");

            //    //HostType = info.GetValue<byte>("HostType");
            //    Notify = info.GetValue<string>("Notify");

            //    //Command = info.GetValue<string>("Command");
            //    //IsDuplex = info.GetValue<bool>("IsDuplex");
            //    //_Headers = (GenericNameValue)info.GetValue("Headers");
            //}
        }
Exemplo n.º 13
0
        /// <summary>
        /// Write the current object include the body and properties to <see cref="ISerializerContext"/> using <see cref="SerializeInfo"/>.
        /// </summary>
        /// <param name="context"></param>
        public void WriteContext(ISerializerContext context)
        {
            SerializeInfo info = new SerializeInfo();

            info.Add("MessageState", (byte)MessageState);
            info.Add("MessageType", (byte)MessageType);
            info.Add("Command", (byte)Command);
            info.Add("Priority", (byte)Priority);
            info.Add("Identifier", Identifier);
            info.Add("Retry", Retry);
            info.Add("ArrivedTime", ArrivedTime);
            //info.Add("SentTime", SentTime);
            info.Add("Modified", Modified);
            info.Add("Expiration", Expiration);
            //info.Add("MessageId", MessageId);
            info.Add("TransformType", (byte)TransformType);
            info.Add("Destination", Destination);
            //info.Add("Label", Label);
            //info.Add("Sender", Sender);
            ////info.Add("Topic", Topic);
            //info.Add("Headers", HeaderStream);
            info.Add("BodyStream", BodyStream);
            info.Add("ItemBinary", new NetStream(ItemBinary));

            //if (Command != QueueCmd.Ack)
            //{
            //    info.Add("Formatter", (int)Formatter);
            //    info.Add("BodyStream", BodyStream);
            //    info.Add("TypeName", TypeName);
            //    info.Add("Segments", Segments);

            //    //info.Add("HostType", HostType);
            //    info.Add("Notify", Notify);

            //    //info.Add("Command", Command);
            //    //info.Add("IsDuplex", IsDuplex);
            //    //info.Add("Headers", GetHeaders());
            //}
            context.WriteSerializeInfo(info);
        }
 public override void Write(Utf8JsonWriter writer,
     Info value,
     JsonSerializerOptions options) => SerializeInfo.Serialize(writer, value, "level1Name", "infoInherited");
Exemplo n.º 15
0
            public override void Make()
            {
                var Type = typeof(t);

                var IsSerializable = Type.GetInterfaces().Where(
                    (c) =>
                {
                    if (c.IsGenericType)
                    {
                        if (c.GetGenericTypeDefinition() == ISerializableType)
                        {
                            return(true);
                        }
                    }
                    return(false);
                }).FirstOrDefault();

                if (IsSerializable != null)
                {
                    InsertSerializer(() =>
                    {
                        var sr = MakeSerializer_Serializable();
                        return(sr.Serializer, sr.Deserializer);
                    });
                }
                else if (Type == typeof(Delegate))
                {
                    InsertSerializer(
                        (Data, obj) =>
                    {
                        var DType      = obj.GetType();
                        var Serializer = GetSerialize(DType);
                        Serializere.VisitedInfoSerialize <object>(Data, DType, () => (Serializer.NameAsByte, null));
                        Serializer.Serializer(Data, obj);
                    },
                        (Data) =>
                    {
                        var Info = Serializere.VisitedInfoDeserialize(Data, () => Serializere.Read(Data));

                        return(GetSerialize(Info).Deserializer(Data));
                    });
                }
                else if (Type.GetInterfaces().Where((c) => c == typeof(Collection.Array.Base.IArray)).FirstOrDefault() != null)
                {
                    InsertSerializer(() =>
                    {
                        var sr = MakeSerializer_Monsajem_Array();
                        return(sr.Serializer, sr.Deserializer);
                    });
                }
                else if (Type.IsInterface)
                {
                    InsertSerializer(() =>
                    {
                        var Sr = SerializeInfo <object> .GetSerialize();
                        return(Sr.Serializer, Sr.Deserializer);
                    });
                }
                else if (Type.IsArray)
                {
                    var size = SerializeInfo.GetSerialize(Type.GetElementType()).ConstantSize;
                    if (size != -1)
                    {
                        InsertSerializer(() =>
                        {
                            var sr = MakeSerializer_Array_Struct(size);
                            return(sr.Serializer, sr.Deserializer);
                        });
                    }
                    else
                    {
                        InsertSerializer(() =>
                        {
                            var sr = MakeSerializer_Array_Class();
                            return(sr.Serializer, sr.Deserializer);
                        });
                    }
                }
                else if (Type == typeof(System.Array))
                {
                    InsertSerializer(() =>
                    {
                        var Sr = SerializeInfo <object> .GetSerialize();
                        return(Sr.Serializer, Sr.Deserializer);
                    });
                }
                else if (Type == typeof(System.Array))
                {
                    InsertSerializer(() =>
                    {
                        var sr = MakeSerializer_Array_Class();
                        return((Data, obj) =>
                        {
                            var ar = (System.Array)obj;
                        }, (Data) =>
                        {
                            return null;
                        }
                               );
                    });
                }
                else if (Type.BaseType == typeof(MulticastDelegate))
                {
                    InsertSerializer(() =>
                    {
                        var sr = MakeSerializer_Delegate();
                        return(sr.Serializer, sr.Deserializer);
                    });
                }
                else if (Nullable.GetUnderlyingType(Type) != null)
                {
                    InsertSerializer(() =>
                    {
                        var sr = MakeSerializer_Nullable();
                        return(sr.Serializer, sr.Deserializer);
                    });
                }
                else if (Type.IsValueType)
                {
                    if (ConstantSize == -1)
                    {
                        InsertSerializer(() =>
                        {
                            var sr = MakeSerializer_ValueType();
                            return(sr.Serializer, sr.Deserializer);
                        });
                    }
                    else
                    {
                        InsertSerializer(() => (Default_Serializer, Default_Deserializer));
                    }
                }
                else
                {
                    InsertSerializer(() =>
                    {
                        var sr = MakeSerializer_Else();
                        return(sr.Serializer, sr.Deserializer);
                    });
                }
            }
Exemplo n.º 16
0
        /// <summary>
        /// Read <see cref="ISerializerContext"/> context to the current object include the body and properties using <see cref="SerializeInfo"/>.
        /// </summary>
        /// <param name="context"></param>
        public void ReadContext(ISerializerContext context)
        {
            SerializeInfo info = context.ReadSerializeInfo();

            ReadContext(info);
        }
Exemplo n.º 17
0
 public int SizeOf <t>() => SerializeInfo <t> .GetSerialize().ConstantSize;
Exemplo n.º 18
0
        /// <summary>
        /// 序列化檔案
        /// </summary>
        /// <param name="FilePath"></param>
        /// <returns></returns>
        public SerializeFileInfo File(string FilePath)
        {
            SerializeFileInfo serializeFileInfo = new SerializeFileInfo();

            SerializeInfo serializeInfo = new SerializeInfo();

            FileStream fileStream = null;

            FileInfo fileInfo = null;

            try
            {
                fileStream = new FileStream(FilePath, FileMode.Open);

                byte[] bytes = new byte[fileStream.Length];

                for (int i = 0; i < bytes.Length; i++)
                {
                    bytes[i] = (byte)fileStream.ReadByte();
                }

                serializeInfo = Start(bytes);

                if (serializeInfo.Message.Length > 0)
                {
                    serializeFileInfo.Message = serializeInfo.Message; return(serializeFileInfo);
                }
                serializeFileInfo.Body = serializeInfo.Body;

                fileInfo = new FileInfo(FilePath);

                serializeFileInfo.FileInfos = fileInfo;
            }
            catch (System.UnauthorizedAccessException ex)
            {
                serializeFileInfo.Message = "[Serialize.File][UnauthorizedAccessException][" + ex.ToString() + "]";
            }
            catch (System.Security.SecurityException ex)
            {
                serializeFileInfo.Message = "[Serialize.File][SecurityException][" + ex.ToString() + "]";
            }
            catch (System.IO.PathTooLongException ex)
            {
                serializeFileInfo.Message = "[Serialize.File][PathTooLongException][" + ex.ToString() + "]";
            }
            catch (System.IO.FileNotFoundException ex)
            {
                serializeFileInfo.Message = "[Serialize.File][FileNotFoundException][" + ex.ToString() + "]";
            }
            catch (System.Exception ex)
            {
                serializeFileInfo.Message = "[Serialize.File][" + ex.ToString() + "]";
            }
            finally
            {
                if (fileStream != null)
                {
                    fileStream.Close(); fileStream = null;
                }
            }
            return(serializeFileInfo);
        }
Exemplo n.º 19
0
        public Serialization()
        {
            Serializere = this;
            SerializeInfo <object> .InsertSerializer(
                (Data, obj) => { },
                (Data) => new object(), false);

            SerializeInfo <DateTime> .InsertSerializer(
                (Data, obj) =>
            {
                Data.Data.Write(BitConverter.GetBytes(((DateTime)obj).Ticks), 0, 8);
            },
                (Data) =>
            {
                int Position = Data.From; Data.From += 8;
                return(DateTime.FromBinary(BitConverter.ToInt64(Data.Data, Position)));
            }, true);

            SerializeInfo <string> .InsertSerializer(
                (Data, obj) =>
            {
                if (obj == null)
                {
                    Data.Data.Write(BitConverter.GetBytes(-1), 0, 4);
                    return;
                }
                var Str = UTF8.GetBytes((string)obj);
                var Len = BitConverter.GetBytes(Str.Length);
                Data.Data.Write(Len, 0, 4);
                Data.Data.Write(Str, 0, Str.Length);
            },
                (Data) =>
            {
                var StrSize = BitConverter.ToInt32(Data.Data, Data.From);
                Data.From  += 4;
                if (StrSize == -1)
                {
                    return(null);
                }
                var Position = Data.From;
                Data.From   += StrSize;
                return(UTF8.GetString(Data.Data, Position, StrSize));
            }, true);

            SerializeInfo <Type> .InsertSerializer(
                (Data, obj) =>
            {
                var Name = Write((obj as Type).MidName());
                Data.Data.Write(Name, 0, Name.Length);
            },
                (Data) =>
            {
                return(Read(Data).GetTypeByName());
            }, true);

            {
                var SR = SerializeInfo <object> .GetSerialize();

                SerializeInfo <System.Runtime.InteropServices.GCHandle> .InsertSerializer(
                    (Data, obj) =>
                {
                    var GC = (System.Runtime.InteropServices.GCHandle)obj;
                    SR.Serializer(Data, GC.Target);
                },
                    (Data) =>
                {
                    return(System.Runtime.InteropServices.GCHandle.Alloc(SR.Deserializer(Data)));
                }, true);
            }

            SerializeInfo <IEqualityComparer <string> > .InsertSerializer(
                (Data, obj) =>
            {
                if (obj == null)
                {
                    Data.Data.WriteByte(0);
                }
                else
                {
                    Data.Data.WriteByte(1);
                }
            },
                (Data) =>
            {
                if (Data.Data[Data.From++] == 0)
                {
                    return(null);
                }
                else
                {
                    return(EqualityComparer <string> .Default);
                }
            }, true);
        }
Exemplo n.º 20
0
 /// <summary>
 /// Initialize a new instance of MessageStream from <see cref="SerializeInfo"/>.
 /// </summary>
 /// <param name="info"></param>
 public Message(SerializeInfo info)
 {
     ReadContext(info);
 }
Exemplo n.º 21
0
        public Serialization()
        {
            Serializere = this;
            SerializeInfo <object> .InsertSerializer(
                (Data, obj) => { },
                (Data) => new object(), false);

            SerializeInfo <bool> .InsertSerializer(
                (Data, obj) =>
            {
                if ((bool)obj == true)
                {
                    Data.S_Data.WriteByte(1);
                }
                else
                {
                    Data.S_Data.WriteByte(0);
                }
            },
                (Data) =>
            {
                int Position = Data.From; Data.From += 1;
                var Result   = (Data.D_Data)[Position];
                return(Result > 0);
            }, true);

            SerializeInfo <char> .InsertSerializer(
                (Data, Obj) =>
            {
                Data.S_Data.Write(BitConverter.GetBytes((char)Obj), 0, 2);
            },
                (Data) =>
            {
                int Position = Data.From; Data.From += 2;
                return(BitConverter.ToChar(Data.D_Data, Position));
            }, true);

            SerializeInfo <byte> .InsertSerializer(
                (Data, Obj) =>
            {
                Data.S_Data.WriteByte((byte)Obj);
            },
                (Data) =>
            {
                int Position = Data.From; Data.From += 1;
                return(Data.D_Data[Position]);
            }, true);

            SerializeInfo <sbyte> .InsertSerializer(
                (Data, Obj) =>
            {
                Data.S_Data.WriteByte((byte)((sbyte)Obj));
            },
                (Data) =>
            {
                int Position = Data.From; Data.From += 1;
                return((sbyte)Data.D_Data[Position]);
            }, true);

            SerializeInfo <short> .InsertSerializer(
                (Data, obj) =>
            {
                Data.S_Data.Write(BitConverter.GetBytes((short)obj), 0, 2);
            },
                (Data) =>
            {
                int Position = Data.From; Data.From += 2;
                return(BitConverter.ToInt16(Data.D_Data, Position));
            }, true);

            SerializeInfo <ushort> .InsertSerializer(
                (Data, Obj) =>
            {
                Data.S_Data.Write(BitConverter.GetBytes((ushort)Obj), 0, 2);
            },
                (Data) =>
            {                 /// as UInt16
                int Position = Data.From; Data.From += 2;
                return(BitConverter.ToUInt16(Data.D_Data, Position));
            }, true);

            SerializeInfo <int> .InsertSerializer(
                (Data, obj) =>
            {                 /// as Int32
                Data.S_Data.Write(BitConverter.GetBytes((int)obj), 0, 4);
            },
                (Data) =>
            {                 /// as Int32
                int Position = Data.From; Data.From += 4;
                return(BitConverter.ToInt32(Data.D_Data, Position));
            }, true);

            SerializeInfo <uint> .InsertSerializer(
                (Data, obj) =>
            {                 /// as UInt32
                Data.S_Data.Write(BitConverter.GetBytes((uint)obj), 0, 4);
            },
                (Data) =>
            {                 /// as UInt32
                int Position = Data.From; Data.From += 4;
                return(BitConverter.ToUInt32(Data.D_Data, Position));
            }, true);

            SerializeInfo <long> .InsertSerializer(
                (Data, obj) =>
            {                 /// as Int64
                Data.S_Data.Write(BitConverter.GetBytes((long)obj), 0, 8);
            },
                (Data) =>
            {                 /// as Int64
                int Position = Data.From; Data.From += 8;
                return(BitConverter.ToInt64(Data.D_Data, Position));
            }, true);

            SerializeInfo <ulong> .InsertSerializer(
                (Data, obj) =>
            {
                Data.S_Data.Write(BitConverter.GetBytes((ulong)obj), 0, 8);
            },
                (Data) =>
            {
                int Position = Data.From; Data.From += 8;
                return(BitConverter.ToUInt64(Data.D_Data, Position));
            }, true);

            SerializeInfo <float> .InsertSerializer(
                (Data, obj) =>
            {    /// as float
                Data.S_Data.Write(BitConverter.GetBytes((float)obj), 0, 4);
            },
                (Data) =>
            {    /// as float
                int Position = Data.From; Data.From += 4;
                return(BitConverter.ToSingle(Data.D_Data, Position));
            }, true);

            SerializeInfo <double> .InsertSerializer(
                (Data, obj) =>
            {                 /// as double
                Data.S_Data.Write(BitConverter.GetBytes((double)obj), 0, 8);
            },
                (Data) =>
            {                 /// as double
                int Position = Data.From; Data.From += 8;
                return(BitConverter.ToDouble(Data.D_Data, Position));
            }, true);

            SerializeInfo <DateTime> .InsertSerializer(
                (Data, obj) =>
            {
                Data.S_Data.Write(BitConverter.GetBytes(((DateTime)obj).Ticks), 0, 8);
            },
                (Data) =>
            {
                int Position = Data.From; Data.From += 8;
                return(DateTime.FromBinary(BitConverter.ToInt64(Data.D_Data, Position)));
            }, true);

            SerializeInfo <string> .InsertSerializer(
                (Data, obj) =>
            {
                if (obj == null)
                {
                    Data.S_Data.Write(BitConverter.GetBytes(-1), 0, 4);
                    return;
                }
                var Str = UTF8.GetBytes((string)obj);
                var Len = BitConverter.GetBytes(Str.Length);
                Data.S_Data.Write(Len, 0, 4);
                Data.S_Data.Write(Str, 0, Str.Length);
            },
                (Data) =>
            {
                var StrSize = BitConverter.ToInt32(Data.D_Data, Data.From);
                Data.From  += 4;
                if (StrSize == -1)
                {
                    return(null);
                }
                var Position = Data.From;
                Data.From   += StrSize;
                return(UTF8.GetString(Data.D_Data, Position, StrSize));
            }, true);

            SerializeInfo <IntPtr> .InsertSerializer(
                (Data, obj) =>
            {                 /// as IntPtr
                Data.S_Data.Write(BitConverter.GetBytes(((IntPtr)obj).ToInt64()), 0, 8);
            },
                (Data) =>
            {                 /// as IntPtr
                int Position = Data.From; Data.From += 8;
                return(new IntPtr(BitConverter.ToInt64(Data.D_Data, Position)));
            }, true);

            SerializeInfo <UIntPtr> .InsertSerializer(
                (Data, obj) =>
            {                 /// as UIntPtr
                Data.S_Data.Write(BitConverter.GetBytes(((UIntPtr)obj).ToUInt64()), 0, 8);
            },
                (Data) =>
            {                 /// as UIntPtr
                int Position = Data.From; Data.From += 8;
                return(new UIntPtr(BitConverter.ToUInt64(Data.D_Data, Position)));
            }, true);

            SerializeInfo <decimal> .InsertSerializer(
                (Data, obj) =>
            {                 /// as Decimal
                Data.S_Data.Write(BitConverter.GetBytes(Decimal.ToDouble((decimal)obj)), 0, 8);
            },
                (Data) =>
            {                 /// as Decimal
                int Position = Data.From; Data.From += 8;
                return(System.Convert.ToDecimal(BitConverter.ToDouble(Data.D_Data, Position)));
            }, true);

            SerializeInfo <Type> .InsertSerializer(
                (Data, obj) =>
            {
                var Name = Write(((Type)obj).MidName());
                Data.S_Data.Write(Name, 0, Name.Length);
            },
                (Data) =>
            {
                return(Read(Data).GetTypeByName());
            }, true);

            {
                var SR = SerializeInfo <object> .GetSerialize();

                SerializeInfo <System.Runtime.InteropServices.GCHandle> .InsertSerializer(
                    (Data, obj) =>
                {
                    var GC = (System.Runtime.InteropServices.GCHandle)obj;
                    SR.Serializer(Data, GC.Target);
                },
                    (Data) =>
                {
                    return(System.Runtime.InteropServices.GCHandle.Alloc(SR.Deserializer(Data)));
                }, true);
            }

            SerializeInfo <IEqualityComparer <string> > .InsertSerializer(
                (Data, obj) =>
            {
                if (obj == null)
                {
                    Data.S_Data.WriteByte(0);
                }
                else
                {
                    Data.S_Data.WriteByte(1);
                }
            },
                (Data) =>
            {
                if (Data.D_Data[Data.From++] == 0)
                {
                    return(null);
                }
                else
                {
                    return(EqualityComparer <string> .Default);
                }
            }, true);
        }
Exemplo n.º 22
0
        /// <summary>
        /// 把一个DataTable写入到数据库中(新建),返回插入行数,并添加新的标识列【ID20】因为ID列有可能和其它表关联,这个ID20是一个无关联的自动编号列,如果原先有ID20这一列,会删去这一列。
        /// </summary>
        public int CreateTable(DataTable dt, string tbName)
        {
            string        sqlPM    = "";
            string        sqlPM2   = "";
            ArrayList     arPMName = new ArrayList();
            SerializeInfo ser      = new SerializeInfo();

            //先删除原来的表
            try
            {
                int dd = this.Excute("drop table [" + tbName + "]");
            }
            catch
            { }

            string sql1 = "Create Table [" + tbName + "](";

            foreach (DataColumn dc in dt.Columns)
            {
                string colName = dc.ColumnName.Replace('.', '_');
                if (colName.ToLower() == "id20")
                {
                    continue;
                }

                string type  = (ser.ChangeType(dc.DataType)).ToString();
                string nullb = (dc.AllowDBNull) ? "NULL" : "not null";
                //string identity = (dc.Unique) ? "identity(1,1)" : " ";

                sql1   += "[" + colName + "] " + type + " " + nullb + ",";
                sqlPM  += "@" + colName + ",";
                sqlPM2 += "[" + colName + "],";
                arPMName.Add("@" + colName);
            }

            sql1 += " [ID20] autoincrement(1) ,constraint [ID20] primary key([ID20]) )";
            int b = this.Excute(sql1);


            int iOK = 0;

            sqlPM  = sqlPM.TrimEnd(new char[] { ',' });
            sqlPM2 = sqlPM2.TrimEnd(new char[] { ',' });
            string sql = "insert into [" + tbName + "](" + sqlPM2 + ") values (" + sqlPM + ")";

            foreach (DataRow drRow in dt.Rows)
            {
                object[] objval = new object[dt.Columns.Count];
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    objval[i] = drRow[i];
                }

                int a = this.Excute(sql, ser.ArrayListToArr(arPMName), objval);
                if (a == 1)
                {
                    iOK++;
                }
                else
                {
                    //str += "------Error";
                }
            }

            return(iOK);
        }