Пример #1
0
        public SerializerBuilder(SerializerBuilder source)
        {
            _serializerFactory = () => source.Serializer;
            _serializer = new Lazy<IMessageSerializer>(CreateSerializer);
            _deserializer = new Lazy<IMessageDeserializer>(CreateDeserializer);

            _deserializerFactories = new Dictionary<string, DeserializerFactory>(source._deserializerFactories, StringComparer.OrdinalIgnoreCase);
        }
Пример #2
0
        public void SetSerializer(SerializerFactory serializerFactory)
        {
            if (serializerFactory == null)
                throw new ArgumentNullException(nameof(serializerFactory));

            if (_serializer.IsValueCreated)
                throw new ConfigurationException("The serializer has already been created, the serializer cannot be changed at this time.");

            _serializerFactory = serializerFactory;
        }
Пример #3
0
        public SerializerBuilder()
        {
            _serializerFactory = () => new JsonMessageSerializer();
            _serializer = new Lazy<IMessageSerializer>(CreateSerializer);
            _deserializer = new Lazy<IMessageDeserializer>(CreateDeserializer);

            _deserializerFactories = new Dictionary<string, DeserializerFactory>(StringComparer.OrdinalIgnoreCase);

            AddDeserializer(JsonMessageSerializer.JsonContentType, () => new JsonMessageDeserializer(JsonMessageSerializer.Deserializer));
            AddDeserializer(BsonMessageSerializer.BsonContentType, () => new BsonMessageDeserializer(BsonMessageSerializer.Deserializer));
            AddDeserializer(XmlMessageSerializer.XmlContentType, () => new XmlMessageDeserializer(JsonMessageSerializer.Deserializer));
        }
Пример #4
0
        public override void WriteBytes(object obj, SerializerInputStream serializerInputStream)
        {
            serializerInputStream.Write(RpcSerializerUtil.Byte_Dictionary);
            var startLength = serializerInputStream.Length;

            serializerInputStream.Write(0);//当前流长度占位
            var dic = (IDictionary)obj;

            serializerInputStream.Write(_type.FullName);
            serializerInputStream.Write(dic.Count);
            var enumerator = dic.GetEnumerator();

            while (enumerator.MoveNext())
            {
                SerializerFactory.Serializer(enumerator.Key, serializerInputStream);
                SerializerFactory.Serializer(enumerator.Value, serializerInputStream);
            }
            serializerInputStream.UpdateCurrentLength(serializerInputStream.Length - startLength - 4, startLength);//填补流长度
        }
Пример #5
0
        internal async Task <int> SaveObjectAsync(object oi, SqoTypeInfo ti, ObjectInfo objInfo)
        {
            ObjectSerializer serializer = SerializerFactory.GetSerializer(this.path, GetFileByType(ti), useElevatedTrust);

            serializer.NeedSaveComplexObjectAsync += new ComplexObjectEventHandler(serializer_NeedSaveComplexObjectAsync);
            await CheckForConcurencyAsync(oi, objInfo, ti, serializer, false).ConfigureAwait(false);

            await CheckConstraintsAsync(objInfo, ti).ConfigureAwait(false);

            Dictionary <string, object> oldValuesOfIndexedFields = await this.indexManager.PrepareUpdateIndexesAsync(objInfo, ti).ConfigureAwait(false);

            await serializer.SerializeObjectAsync(objInfo, this.rawSerializer).ConfigureAwait(false);

            metaCache.SetOIDToObject(oi, objInfo.Oid, ti);

            await this.indexManager.UpdateIndexesAsync(objInfo, ti, oldValuesOfIndexedFields).ConfigureAwait(false);

            return(objInfo.Oid);
        }
Пример #6
0
        internal int SaveObject(object oi, SqoTypeInfo ti, ObjectInfo objInfo)
        {
            ObjectSerializer serializer = SerializerFactory.GetSerializer(this.path, GetFileByType(ti), useElevatedTrust);

            serializer.NeedSaveComplexObject += new EventHandler <ComplexObjectEventArgs>(serializer_NeedSaveComplexObject);
            CheckForConcurency(oi, objInfo, ti, serializer, false);

            CheckConstraints(objInfo, ti);

            Dictionary <string, object> oldValuesOfIndexedFields = this.indexManager.PrepareUpdateIndexes(objInfo, ti);

            serializer.SerializeObject(objInfo, this.rawSerializer);

            metaCache.SetOIDToObject(oi, objInfo.Oid, ti);

            this.indexManager.UpdateIndexes(objInfo, ti, oldValuesOfIndexedFields);

            return(objInfo.Oid);
        }
Пример #7
0
        internal async Task <bool> SaveValueAsync(int oid, string field, SqoTypeInfo ti, object value)
        {
            if (field == "OID")
            {
                throw new SiaqodbException("OID cannot be saved from client code!");
            }
            ObjectSerializer serializer = SerializerFactory.GetSerializer(this.path, GetFileByType(ti), useElevatedTrust);

            serializer.NeedSaveComplexObjectAsync += new ComplexObjectEventHandler(serializer_NeedSaveComplexObjectAsync);

            if (oid > 0 && oid <= ti.Header.numberOfRecords && !(await serializer.IsObjectDeletedAsync(oid, ti).ConfigureAwait(false)))
            {
                return(await serializer.SaveFieldValueAsync(oid, field, ti, value, this.rawSerializer).ConfigureAwait(false));
            }
            else
            {
                return(false);
            }
        }
Пример #8
0
        internal bool SaveValue(int oid, string field, SqoTypeInfo ti, object value)
        {
            if (field == "OID")
            {
                throw new SiaqodbException("OID cannot be saved from client code!");
            }
            ObjectSerializer serializer = SerializerFactory.GetSerializer(this.path, GetFileByType(ti), useElevatedTrust);

            serializer.NeedSaveComplexObject += new EventHandler <ComplexObjectEventArgs>(serializer_NeedSaveComplexObject);

            if (oid > 0 && oid <= ti.Header.numberOfRecords && !serializer.IsObjectDeleted(oid, ti))
            {
                return(serializer.SaveFieldValue(oid, field, ti, value, this.rawSerializer));
            }
            else
            {
                return(false);
            }
        }
Пример #9
0
        public void SerializeLevel()
        {
#if NETFX_CORE
            throw new System.NotImplementedException("Level prefab saving not implemented in Windows 8 yet.");
#else
            using (StreamWriter streamWriter = new StreamWriter(filepath))
            {
                ISerializer <LevelPrefab> serializer = SerializerFactory.CreateSerializer <LevelPrefab>();
                serializer.WriteObject(this, streamWriter.BaseStream);
            }
#if DEBUG
            using (StreamWriter streamWriter = new StreamWriter(@"..\..\..\" + filepath))
            {
                ISerializer <LevelPrefab> serializer = SerializerFactory.CreateSerializer <LevelPrefab>();
                serializer.WriteObject(this, streamWriter.BaseStream);
            }
#endif
#endif
        }
Пример #10
0
 public void SetUp()
 {
     m_serFactory = new SerializerFactory();
     omg.org.IOP.CodecFactory codecFactory =
         new Ch.Elca.Iiop.Interception.CodecFactoryImpl(m_serFactory);
     m_codec =
         codecFactory.create_codec(
             new omg.org.IOP.Encoding(omg.org.IOP.ENCODING_CDR_ENCAPS.ConstVal,
                                      1, 2));
     m_iiopUrlUtil =
         IiopUrlUtil.Create(m_codec, new object[] {
         Services.CodeSetService.CreateDefaultCodesetComponent(m_codec)
     });
     m_serFactory.Initalize(new SerializerFactoryConfig(), m_iiopUrlUtil);
     m_handler =
         new GiopMessageHandler(
             new ArgumentsSerializerFactory(m_serFactory),
             GiopHeader.GetDefaultHeaderFlagsForEndian(Endian.BigEndian));
 }
Пример #11
0
        /// <summary>
        /// 发送请求带返回
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="transfer"></param>
        /// <returns></returns>
        public T  Send <T>(DBTransfer transfer)
        {
            byte[] buf = SerializerFactory <CommonSerializer> .Serializer(transfer);

            RequestServer request = new RequestServer();

            request.Address = SrvControl.Instance.GetCureent();
            byte[]        rec    = request.Request(buf);
            RequestResult result = SerializerFactory <CommonSerializer> .Deserialize <RequestResult>(rec);

            if (result.Error != ErrorCode.Exception)
            {
                if (typeof(T) == typeof(DataTable) || typeof(T) == typeof(DataSet))
                {
                    //当前序列化不能对DataTable
                    //服务端转换为XML
                    if (result.Result != null)
                    {
                        if (typeof(string) == result.Result.GetType())
                        {
                            DataSet ds     = new DataSet();
                            var     stream = new StringReader(result.Result.ToString());
                            //从stream装载到XmlTextReader
                            var reader = new XmlTextReader(stream);
                            ds.ReadXml(reader);
                            if (typeof(T) == typeof(DataSet))
                            {
                                result.Result = ds;
                            }
                            else
                            {
                                result.Result = ds.Tables[0];
                            }
                        }
                    }
                }
                return((T)result.Result);
            }
            else
            {
                throw new ServerException(result.ReslutMsg);
            }
        }
        public async Task AsyncNoReturn(IInvocation invocation)
        {
            IHttpClientRequestContext context = RequestContextFactory.CreateContext(new CastleCoreInvocationCallContextAdapter(invocation),
                                                                                    new CastleCoreInvocationParametersContextAdapter(invocation));

            //If it has no body we don't need to provide or produce serializers for it.
            if (!context.BodyContext.HasBody)
            {
                await ProxyClient.Send(context).ConfigureAwait(false);

                return;
            }

            //We need to look at the request to determine which serializer strategy should be used.
            IRequestSerializationStrategy serializer = SerializerFactory.SerializerFor(context.BodyContext.ContentAttributeType);

            //Because we don't need to get any returned information we can just send it
            await ProxyClient.Send(context, serializer).ConfigureAwait(false);
        }
Пример #13
0
        public void SetUp()
        {
            SerializerFactory serFactory =
                new SerializerFactory();
            CodecFactory codecFactory =
                new CodecFactoryImpl(serFactory);

            m_codec =
                codecFactory.create_codec(
                    new omg.org.IOP.Encoding(ENCODING_CDR_ENCAPS.ConstVal, 1, 2));
            IiopUrlUtil iiopUrlUtil =
                IiopUrlUtil.Create(m_codec, new object[] {
                Services.CodeSetService.CreateDefaultCodesetComponent(m_codec)
            });

            serFactory.Initalize(new SerializerFactoryConfig(), iiopUrlUtil);
            m_defaultCodeSetTaggedComponent =
                Services.CodeSetService.CreateDefaultCodesetComponent(m_codec);
        }
Пример #14
0
        /// <summary>
        /// 超时处理
        /// </summary>
        /// <param name="RequestID"></param>
        /// <param name="address"></param>
        private void TimeOutProcesser(long RequestID, long rspid, EndPoint address)
        {
            RequestResult result = new RequestResult();

            result.Error     = ErrorCode.TimeOut;
            result.ErrorMsg  = result.Error.ToDescriptionString();
            result.ReslutMsg = "执行超时";
            result.Result    = null;
            result.RequestID = RequestID;
            result.ID        = rspid;
            byte[] r = SerializerFactory <CommonSerializer> .Serializer <RequestResult>(result);

            AsyncUdpUserToken token = new AsyncUdpUserToken();

            token.Data   = r;
            token.Length = r.Length;
            token.Remote = address;
            udp.SendPackage(token);
        }
Пример #15
0
        public void ComplexTypesSequence_SerializeAndDeserializeBack_OriginAndDeserializedAreEqual()
        {
            var origin = new object[]
            {
                "fortyTwo",
                "",
                new int[] { 1, 2, 3, 4 },
                new User
                {
                    Age      = 18,
                    IsFemale = true,
                    Name     = "Kate"
                },
                new MyStruct()
                {
                    MyBool = true,
                    MyDate = DateTime.Now,
                    MyInt  = 42,
                    MyLong = 42,
                }
            };

            var sequenceTypes = origin.Select(o => o.GetType()).ToArray();

            var serializer   = SerializerFactory.CreateDefault().Create(sequenceTypes);
            var deserializer = DeserializerFactory.CreateDefault().Create(sequenceTypes);
            var stream       = new MemoryStream();

            serializer.Serialize(origin, stream);
            stream.Position = 0;
            var deserialized = (object[])deserializer.Deserialize(stream, (int)stream.Length);

            Assert.Multiple(() =>
            {
                Assert.AreEqual(origin[0], deserialized[0]);
                Assert.AreEqual(origin[1], deserialized[1]);
                CollectionAssert.AreEqual((IEnumerable)origin[2], (IEnumerable)deserialized[2]);
                Assert.IsTrue(((User)origin[3]).IsSameTo((User)deserialized[3]));
                Assert.IsTrue(((MyStruct)origin[4]).IsSameTo((MyStruct)deserialized[4]));
                Assert.AreEqual(origin.Length, deserialized.Length);
            });
        }
Пример #16
0
 public void Action()
 {
     var test = new Test
     {
         P1  = null,
         P2  = 2,
         P3  = 3,
         P4  = 4,
         P5  = 5,
         P6  = 6,
         P7  = 7,
         P8  = 8,
         P9  = 9,
         P10 = 10,
         P11 = 'a',
         P12 = false,
         P13 = 1.1,
         P14 = 2,
         P15 = DateTime.Now,
         P16 = TimeSpan.FromTicks(1025233),
         P17 = "测试数据",
         P18 = Encoding.UTF8.GetBytes("你好啊"),
         P19 = new Aa
         {
             P1 = 19,
             P2 = Sex.Woman,
             P3 = new int[][] {
                 new int[] { }, new int[] { 1, 2, 4, 5 }
             },
             P4 = new Dictionary <int, string>
             {
                 [1] = "1",
                 [2] = "2"
             },
             P5 = Enumerable.Range(0, 10),
             P6 = Guid.NewGuid(),
             P7 = ObjectId.GenerateNewId()
         }
     };
     var bytes = SerializerFactory.Serializer(test);
     var obj   = SerializerFactory.Deserializer(bytes);
 }
Пример #17
0
        /// <summary>
        /// 处理请求任务
        /// </summary>
        /// <param name="source"></param>
        /// <param name="client"></param>
        private void SubmitTask(SrvDataSource source, ClientRequest client)
        {
            Console.WriteLine("Submint:" + Thread.CurrentThread.ManagedThreadId);
            var data = source.Message as byte[];
            //获取传递的请求
            DBTransfer model = SerializerFactory <CommonSerializer> .Deserialize <DBTransfer>(data);

            if (model.TimeOut == 0)
            {
                //不超时
                var result = DBAcessSrv.Singleton.Execete(Interlocked.Increment(ref rspID), model);
                ResponseResult(source, result, model, client);
            }
            else
            {
                //超时请求
                var result = ExecuteTimeOut(source, client, model);
                ResponseResult(source, result, model, client);
            }
        }
Пример #18
0
 private void SetObjectField(List <FieldInfo> fieldList, object result, byte[] data, int startOffset, int totalLength, out int nextStartOffset)
 {
     if (startOffset < totalLength)
     {
         var fieldName = ByteUtil.DecodeString(data, startOffset, out nextStartOffset);
         startOffset = nextStartOffset;
         var fieldValue = SerializerFactory.Deserializer(data, startOffset, out nextStartOffset);
         var fieldInfo  = fieldList.FirstOrDefault(m => m.Name == fieldName);
         if (fieldInfo != null)
         {
             fieldInfo.SetValue(result, fieldValue);
         }
         startOffset = nextStartOffset;
         SetObjectField(fieldList, result, data, startOffset, totalLength, out nextStartOffset);
     }
     else
     {
         nextStartOffset = startOffset;
     }
 }
Пример #19
0
        public void ValidateSecureCredentialProviderSetter()
        {
            var credential = new Credentials
            {
                Password = "******"
            };

            var json = (string)credential.GetCustomSerializer(SerializerFormat.JSON);

            dynamic deserialized = SerializerFactory.GetCustomSerializer <DynamicSerialization>(SerializerFormat.JSON).Deserialize(json);

            var passwordEncrypted = (string)deserialized.Password;

            var credentialResult = new Credentials
            {
                PasswordInternal = passwordEncrypted
            };

            Assert.Equal(credential.Password, credentialResult.Password);
        }
Пример #20
0
        public static XmlSerializer GetSerializer(Type type, string customKey, SerializerFactory factory)
        {
            string key = customKey + type.AssemblyQualifiedName;

            if (Serializers.ContainsKey(key))
            {
                return(Serializers[key]);
            }
            XmlSerializer serializer = factory();

            if (Serializers.ContainsKey(key))
            {
                return(Serializers[key]);
            }
            lock (_syncRoot)
            {
                Serializers.Add(key, serializer);
            }
            return(serializer);
        }
Пример #21
0
        public LevelPrefab GetLevelPrefab(string filepath)
        {
            try
            {
                LevelPrefab level;
                using (Stream stream = TitleContainer.OpenStream(filepath))
                {
                    ISerializer <LevelPrefab> serializer = SerializerFactory.CreateSerializer <LevelPrefab>();
                    level = serializer.ReadObject(stream);
                }

                return(level);
            }
            catch (FileNotFoundException)
            {
                return(new LevelPrefab {
                    filepath = filepath
                });
            }
        }
Пример #22
0
        /// <summary>
        /// Serializes the cache index.
        /// </summary>
        /// <param name="obj">The cache index to serialize.</param>
        public static void SerializeCacheIndex(Object obj)
        {
            if (obj == null)
            {
                return;
            }

            CacheIndex cacheIndex = obj as CacheIndex;

            if (cacheIndex.Count() <= 0)
            {
                return;
            }

            lock (staticLock)
            {
                ISerializer <CacheIndex> iSerializer = SerializerFactory.Create <CacheIndex>(SerializationFormat.XML);
                iSerializer.SerializeObjectToFile(cacheIndex, cacheIndex.SerializeFile);
            }
        }
        public void ModelJsonDeserializationTest()
        {
            string value =
                @"
        {
          ""IsSuccess"": true,
          ""OperationType"": ""GetSellerAccountStatusResponse"",
          ""SellerID"": ""A006"",
          ""ResponseBody"": {
                        ""Membership"": 0,
            ""FufillmentCenterList"": [
              {
                ""WarehouseLocation"": ""USA"",
                ""WarehouseType"": 0,
                ""ShippingDestinationList"": [
                  ""USA"",
                  ""AUS"",
                  ""HKG"",
                  ""IND"",
                  ""IDN"",
                  ""PHL"",
                  ""KOR"",
                  ""CHL"",
                  ""MAC"",
                  ""CHN"",
                  ""GBR"",
                  ""SGP""
                ]
            }
            ],
            ""SellerName"": ""Test_SandBox_MKTPLS"",
            ""Status"": ""Active""
          }
        }";
            var serializer   = SerializerFactory.GetSerializer(APIFormat.JSON);
            var sellerStatus = serializer.Deserialize <ResponseModel <SellerStatusCheckResponseBody> >(value);
            var body         = sellerStatus.GetResponseBody();

            Assert.IsType <SellerStatusCheckResponseBody>(body);
            Assert.Equal("Test_SandBox_MKTPLS", body.SellerName);
        }
Пример #24
0
 private void Send()
 {
     Task.Factory.StartNew(() =>
     {
         DBTransfer transfer = null;
         int num             = 0;
         int waitTime        = 300;//5分钟
         while (true)
         {
             if (queue.IsEmpty)
             {
                 Thread.Sleep(1000);
                 num++;
                 if (num > waitTime)
                 {
                     break;
                 }
                 continue;
             }
             num = 0;
             if (queue.TryDequeue(out transfer))
             {
                 semaphore.Wait();
                 Task.Factory.StartNew(() =>
                 {
                     byte[] buf            = SerializerFactory <CommonSerializer> .Serializer(transfer);
                     RequestServer request = new RequestServer();
                     request.Address       = SrvControl.Instance.GetCureent();
                     byte[] rec            = request.Request(buf);
                     RequestResult result  = SerializerFactory <CommonSerializer> .Deserialize <RequestResult>(rec);
                     if (SrvExecuteResult != null)
                     {
                         SrvExecuteResult(result.RequestID, result.Error == ErrorCode.Sucess, result.ReslutMsg);
                     }
                     semaphore.Release();
                 });
             }
         }
         Send();//递归更新线程
     });
 }
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="hostName"></param>
        /// <param name="userName"></param>
        /// <param name="port"></param>
        /// <param name="password"></param>
        /// <param name="maxQueueCount"></param>
        /// <param name="serializerType"></param>
        /// <param name="loger"></param>
        /// <param name="writeWorkerTaskNumber"></param>
        private RabbitMQClient(string hostName, string userName, string password, int?port, int maxQueueCount
                               , SerializerType serializerType, ILoger loger = null, short writeWorkerTaskNumber = 4)
        {
            factory          = new ConnectionFactory();
            factory.HostName = hostName;
            if (!port.HasValue || port.Value < 0)
            {
                factory.Port = 5672;
            }
            else
            {
                factory.Port = port.Value;
            }
            factory.Password = password;
            factory.UserName = userName;

            serializer = SerializerFactory.Create(serializerType);
            _queue     = new System.Collections.Concurrent.BlockingCollection <StrongBox <QueueMessage> >();

            //_queue = new System.Collections.Queue();
            _maxQueueCount = maxQueueCount > 0 ? maxQueueCount : Options.DefaultMaxQueueCount;

            //isQueueToWrite = false;
            //resetEvent = new AutoResetEvent(false);

            this.loger = loger;
            //this.waitMillisecondsTimeout = 10000;

            //queueWorkThread = new Thread(QueueToWrite);
            //queueWorkThread.IsBackground = true;
            //queueWorkThread.Start();

            var         scheduler   = new ConcurrentExclusiveSchedulerPair(TaskScheduler.Default, writeWorkerTaskNumber).ExclusiveScheduler;
            TaskFactory taskFactory = new TaskFactory(scheduler);

            for (int i = 0; i < writeWorkerTaskNumber; i++)
            {
                taskFactory.StartNew(QueueToWrite, TaskCreationOptions.LongRunning);
                //Task.Factory.StartNew(QueueToWrite);
            }
        }
Пример #26
0
        public override string SerializeToString()
        {
            string value = string.Empty;

            ISerializable serializer = SerializerFactory.Create(m_Period.StartTime);

            if (serializer != null)
            {
                value += serializer.SerializeToString();
            }

            value += "/";

            serializer = SerializerFactory.Create(m_Period.Duration);
            if (serializer != null)
            {
                value += serializer.SerializeToString();
            }

            return(value);
        }
Пример #27
0
 /// <summary>
 /// Serializes the cache index immediately.
 /// </summary>
 /// <param name="cacheIndex">The cache index to serialize.</param>
 public static void SerializeCacheIndexImmediate(CacheIndex cacheIndex)
 {
     lock (staticLock)
     {
         try
         {
             cacheIndex.LastSerializationDate = DateTime.Now;
             ISerializer <CacheIndex> iSerializer = SerializerFactory.Create <CacheIndex>(SerializationFormat.XML);
             iSerializer.SerializeObjectToFile(cacheIndex, cacheIndex.SerializeFile);
         }
         catch (Exception e)
         {
             int count = -1;
             if (cacheIndex != null)
             {
                 count = cacheIndex.Count;
             }
             Device.Log.Error("Exception trying to serialize cache index immediately. Cache index count was: " + count, e);
         }
     }
 }
        public void SecondaryTriesRepeatedlyToConnect()
        {
            var serializerFactory = new SerializerFactory();
            var serializer = serializerFactory.CreateSerializer();
            
            var communicatorFactory = new CommunicatorFactory();
            var primaryCommunicator = communicatorFactory.CreatePrimaryCommunicator(serializer);
            var secondaryCommunicator = communicatorFactory.CreateSecondaryCommunicator(serializer);
            secondaryCommunicator.Connect();

            Task.Delay(Constants.ConnectionTimeout * 3).Wait();
            Assert.False(secondaryCommunicator.IsConnected);
            
            primaryCommunicator.Connect();
            Task.Delay(Constants.ConnectionTimeout * 2).Wait();
            
            Assert.True(secondaryCommunicator.IsConnected);
            
            secondaryCommunicator.Disconnect();
            primaryCommunicator.Disconnect();
        }
Пример #29
0
        public override void WriteBytes(object obj, SerializerInputStream serializerInputStream)
        {
            serializerInputStream.Write(RpcSerializerUtil.Byte_Enumerable);
            var startLength = serializerInputStream.Length;

            serializerInputStream.Write(0);//当前流长度占位
            serializerInputStream.Write(_type.FullName);
            var count         = 0;
            var enumerable    = (IEnumerable)obj;
            var enumerator    = enumerable.GetEnumerator();
            var currentLength = serializerInputStream.Length;

            serializerInputStream.Write(0);//总个数占位
            while (enumerator.MoveNext())
            {
                count++;
                SerializerFactory.Serializer(enumerator.Current, serializerInputStream);
            }
            serializerInputStream.UpdateCurrentLength(count, currentLength);                                        //填补数量
            serializerInputStream.UpdateCurrentLength(serializerInputStream.Length - startLength - 4, startLength); //填补流长度
        }
Пример #30
0
        public static string InitializeObject(object value, SerializerEnum serializer)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            if (SerializerFactory == null)
            {
                throw new InvalidOperationException();
            }
            if (ClassInfoBuilder == null)
            {
                throw new InvalidOperationException();
            }

            var classInfo = ClassInfoBuilder.BuildObjectTree(value);

            var s = SerializerFactory.GetSerializer(serializer);

            return(s.Serialize(classInfo));
        }
        public void Execute()
        {
            var m1   = new M1();
            var m2_1 = new M2();
            var m2_2 = new M2();
            var m2_3 = new M2();

            using (Stream stream = new MemoryStream())
            {
                var serializer = SerializerFactory.Create(typeof(IMyBusMessage), typeof(M1), typeof(M2));
                serializer.Serialize(new object[] { m1, m2_1, m2_2, m2_3 }, stream);

                stream.Position = 0;

                var messageDeserialized = serializer.Deserialize(stream);
                Assert.IsInstanceOf <M1>(messageDeserialized[0]);
                Assert.IsInstanceOf <M2>(messageDeserialized[1]);
                Assert.IsInstanceOf <M2>(messageDeserialized[2]);
                Assert.IsInstanceOf <M2>(messageDeserialized[3]);
            }
        }
Пример #32
0
        public void Should_throw_an_exception()
        {
            var m2_1 = new M2();
            var m2_2 = new M2();
            var m2_3 = new M2();

            using (Stream stream = new MemoryStream())
            {
                var serializer = SerializerFactory.Create(typeof(IMyBusMessage), typeof(M1), typeof(M2));
                //var exception = Assert.Throws<Exception>(() => serializer.Initialize(new[] { typeof(IMyBusMessage), typeof(M1), typeof(M2) }));
                //Assert.AreEqual("Nested types are not supported by the XmlMessageSerializer.", exception.Message);
                var m1 = new M1();
                serializer.Serialize(new object[] { m1, m2_1, m2_2, m2_3 }, stream);
                stream.Position = 0;
                var messageDeserialized = serializer.Deserialize(stream);
                Assert.IsInstanceOf <M1>(messageDeserialized[0]);
                Assert.IsInstanceOf <M2>(messageDeserialized[1]);
                Assert.IsInstanceOf <M2>(messageDeserialized[2]);
                Assert.IsInstanceOf <M2>(messageDeserialized[3]);
            }
        }
Пример #33
0
        public override object GetObject(byte[] inputBytes, int startOffset, out int nextStartOffset)
        {
            var objectByteData = ByteUtil.DecodeBytes(inputBytes, startOffset, out nextStartOffset);

            if (objectByteData.Length > 0)
            {
                var tableName       = ByteUtil.DecodeString(objectByteData, 0, out int tableNextStartOffset);
                var tabeOffsetIndex = tableNextStartOffset;
                var table           = new DataTable(tableName);
                var columnCount     = ByteUtil.DecodeInt(objectByteData, tabeOffsetIndex, out tableNextStartOffset);
                tabeOffsetIndex = tableNextStartOffset;
                for (int i = 0; i < columnCount; i++)
                {
                    var columnName = ByteUtil.DecodeString(objectByteData, tabeOffsetIndex, out tableNextStartOffset);
                    tabeOffsetIndex = tableNextStartOffset;
                    var columnTypeName = ByteUtil.DecodeString(objectByteData, tabeOffsetIndex, out tableNextStartOffset);
                    tabeOffsetIndex = tableNextStartOffset;
                    var type = SerializerUtil.GetType(columnTypeName);
                    table.Columns.Add(columnName, type);
                }
                var rowCount = ByteUtil.DecodeInt(objectByteData, tabeOffsetIndex, out tableNextStartOffset);
                tabeOffsetIndex = tableNextStartOffset;
                for (int i = 0; i < rowCount; i++)
                {
                    DataRow row = table.NewRow();
                    for (int j = 0; j < columnCount; j++)
                    {
                        row[j]          = SerializerFactory.Deserializer(objectByteData, tabeOffsetIndex, out tableNextStartOffset);
                        tabeOffsetIndex = tableNextStartOffset;
                    }
                    table.Rows.Add(row);
                }
                return(table);
            }
            else
            {
                return(null);
            }
        }
Пример #34
0
 public void SetMessageSerializer(SerializerFactory serializerFactory)
 {
     _serializerBuilder.SetSerializer(serializerFactory);
 }