Пример #1
0
        internal object GetFileHeader(long startPosition)
        {
            if (startPosition < 0)
            {
                throw new ArgumentNullException("startPosition");
            }

            //читаем системный заголовок
            this.BlobStream.Seek(startPosition, SeekOrigin.Begin);
            byte[] systemHeaderBytes = new byte[BlobStreamAdapter.SystemHeaderLength];
            this.BlobStream.Read(systemHeaderBytes, 0, BlobStreamAdapter.SystemHeaderLength);

            //проверка целостности системного заголовка
            for (int i = 0; i < SystemHeaderFixedBytes.Length; i++)
            {
                if (SystemHeaderFixedBytes[i] != systemHeaderBytes[i])
                {
                    throw new Exception(string.Format("Битый заголовок файла (позиция {0}). Не удалось прочитать системный заголовок файла.",
                                                      i));
                }
            }

            //целостность системного заголовока не нарушена, значит можно поднять заголовок файла
            //сразу за фиксированной частью системного заголовка есть 4 байта, в которых указана длина заголовка файла
            //длина заголовка файла
            int headerLength = BitConverter.ToInt32(systemHeaderBytes, SystemHeaderFixedBytes.Length);

            if (headerLength < 1)
            {
                throw new Exception(string.Format("Не удалось считать длину заголовка файла"));
            }

            byte[] headerBytes = new byte[headerLength];
            this.BlobStream.Seek(startPosition + BlobStreamAdapter.SystemHeaderLength, SeekOrigin.Begin);
            this.BlobStream.Read(headerBytes, 0, headerBytes.Length);

            int    headerVersionNumber = BitConverter.ToInt32(systemHeaderBytes, SystemHeaderFixedBytes.Length + BlobConsts.BlobFile.HeaderSizeBytesLength + BlobConsts.BlobFile.AllHashBytesLength);
            object header = null;

            using (MemoryStream headerStream = new MemoryStream(headerBytes))
            {
                headerStream.Position = 0;
                JsonBlobFileHeaderV1 typedHeader = JsonDataSerializer.Deserialize <JsonBlobFileHeaderV1>(headerStream);
                typedHeader.HeaderLength = headerLength;

                if (typedHeader.ContentLength == 0)
                {
                    //длина на момент записи заголовка не была вычислина (потоковая передача)
                    //смотрим эту длину по системному заголовку
                    long contentLengBytesAbsolutePosition = FileStructure.GetContentLengBytesAbsolutePosition();
                    typedHeader.ContentLength = BitConverter.ToInt64(systemHeaderBytes, (int)contentLengBytesAbsolutePosition);
                }

                header = typedHeader;
            }

            return(header);
        }
Пример #2
0
        public ViewResult ImportResources(bool?previewImport, HttpPostedFileBase importFile, bool?showMenu)
        {
            var model = new ImportResourcesViewModel {
                ShowMenu = showMenu ?? false
            };

            if (importFile == null || importFile.ContentLength == 0)
            {
                return(View("ImportResources", model));
            }

            var fileInfo = new FileInfo(importFile.FileName);

            if (fileInfo.Extension.ToLower() != ".json")
            {
                ModelState.AddModelError("file", "Uploaded file has different extension. Json file expected");
                return(View("ImportResources", model));
            }

            var importer     = new ResourceImporter();
            var serializer   = new JsonDataSerializer();
            var streamReader = new StreamReader(importFile.InputStream);
            var fileContent  = streamReader.ReadToEnd();

            try
            {
                var newResources = serializer.Deserialize <IEnumerable <LocalizationResource> >(fileContent);

                if (previewImport.HasValue && previewImport.Value)
                {
                    var changes = importer.DetectChanges(newResources, new GetAllResources.Query().Execute());

                    var availableLanguagesQuery = new AvailableLanguages.Query();
                    var languages = availableLanguagesQuery.Execute();

                    var previewModel = new PreviewImportResourcesViewModel(changes, showMenu ?? false, languages);

                    return(View("ImportPreview", previewModel));
                }

                var result = importer.Import(newResources, previewImport ?? true);

                ViewData["LocalizationProvider_ImportResult"] = result;
            }
            catch (Exception e)
            {
                ModelState.AddModelError("importFailed", $"Import failed! Reason: {e.Message}");
            }

            return(View("ImportResources", model));
        }
Пример #3
0
        public void JsonDataSerializer_DeserializeJsonData_Success()
        {
            // Arrange
            var data        = @"{""Alpha2Code"":""mt""}";
            var mockCountry = new MockCountry()
            {
                Alpha2Code = "mt"
            };

            // Act
            var country = _sut.Deserialize(data);

            // Assert
            Assert.NotNull(country);
            Assert.Equal(mockCountry.Alpha2Code, country.Alpha2Code);
        }
Пример #4
0
        public void JsonSerializationAndDeserlializationTest()
        {
            DataContext dataContext = new DataContext();
            IDataFiller dataFiller  = new DataManualFiller();

            dataFiller.InsertData(dataContext);

            JsonDataSerializer.Serialize(dataContext, pathToFile);

            DataContext deserializedDataContext = JsonDataSerializer.Deserialize <DataContext>(pathToFile);

            CollectionAssert.AreEqual(dataContext.Clients, deserializedDataContext.Clients);
            CollectionAssert.AreEqual(dataContext.Cars, deserializedDataContext.Cars);
            CollectionAssert.AreEqual(dataContext.WarehouseItems, deserializedDataContext.WarehouseItems);

            CollectionAssert.AreEqual(dataContext.BoughtCars, deserializedDataContext.BoughtCars);
            CollectionAssert.AreEqual(dataContext.SoldCars, deserializedDataContext.SoldCars);
        }
Пример #5
0
        private object GetFileHeader(byte[] contentWithHeadersData)
        {
            if (contentWithHeadersData == null)
            {
                throw new ArgumentNullException("fileData");
            }

            object header = null;

            //сразу за системным заголовком 4 байта, в которых указана длина заголовка файла
            //длина заголовка файла
            int headerLength = BitConverter.ToInt32(contentWithHeadersData, SystemHeaderFixedBytes.Length);

            if (headerLength < 1)
            {
                throw new Exception(string.Format("Не удалось считать длину заголовка файла"));
            }

            byte[] headerBytes = new byte[headerLength];
            Array.Copy(contentWithHeadersData, BlobStreamAdapter.SystemHeaderLength, headerBytes, 0, headerLength);

            int headerVersionNumber = BitConverter.ToInt32(contentWithHeadersData, SystemHeaderFixedBytes.Length + BlobConsts.BlobFile.HeaderSizeBytesLength + BlobConsts.BlobFile.AllHashBytesLength);

            using (MemoryStream headerStream = new MemoryStream(headerBytes))
            {
                headerStream.Position = 0;
                JsonBlobFileHeaderV1 typedHeader = JsonDataSerializer.Deserialize <JsonBlobFileHeaderV1>(headerStream);
                typedHeader.HeaderLength = headerLength;

                if (typedHeader.ContentLength == 0)
                {
                    //длина на момент записи заголовка не была вычислина (потоковая передача)
                    //смотрим эту длину по системному заголовку
                    long contentLengBytesAbsolutePosition = FileStructure.GetContentLengBytesAbsolutePosition();
                    typedHeader.ContentLength = BitConverter.ToInt64(contentWithHeadersData, (int)contentLengBytesAbsolutePosition);
                }

                header = typedHeader;
            }

            return(header);
        }
Пример #6
0
        /// <summary>
        /// Получение котировок.
        /// </summary>
        /// <param name="state"></param>
        private void GetQuotes(object state)
        {
            try
            {
                IPEndPoint endPoint = null;
                byte[]     result   = _client.Receive(ref endPoint);
                QuoteDTO   quote    = JsonDataSerializer.Deserialize <QuoteDTO>(result);

                //обновление статистики
                Statistics.UpdateStatistics(quote.Price);
            }
            catch (SocketException ex)
            {
                OnSocketError(ex.SocketErrorCode);
            }
            catch (Exception ex)
            {
                throw new Exception($"В процессе получения котировок произошла неожиданная ошибка: {ex}");
            }
        }
Пример #7
0
        public ViewResult ImportResources(bool?importOnlyNewContent, HttpPostedFileBase importFile, bool?showMenu)
        {
            var model = new ImportResourcesViewModel
            {
                ShowMenu = showMenu ?? false
            };

            if (importFile == null || importFile.ContentLength == 0)
            {
                return(View("ImportResources", model));
            }

            var fileInfo = new FileInfo(importFile.FileName);

            if (fileInfo.Extension.ToLower() != ".json")
            {
                ModelState.AddModelError("file", "Uploaded file has different extension. Json file expected");
                return(View("ImportResources", model));
            }

            var importer     = new ResourceImporter();
            var serializer   = new JsonDataSerializer();
            var streamReader = new StreamReader(importFile.InputStream);
            var fileContent  = streamReader.ReadToEnd();

            try
            {
                var newResources = serializer.Deserialize <IEnumerable <LocalizationResource> >(fileContent);
                var result       = importer.Import(newResources, importOnlyNewContent ?? true);

                ViewData["LocalizationProvider_ImportResult"] = result;
            }
            catch (Exception e)
            {
                ModelState.AddModelError("importFailed", $"Import failed! Reason: {e.Message}");
            }

            return(View("ImportResources", model));
        }
        public void TestDeserialization()
        {
            string input = @"[
  {
    ""id"": 1,
    ""resourceKey"": ""test-key"",
    ""modificationDate"": ""2016-01-01T00:00:00Z"",
    ""author"": ""migration-tool"",
    ""translations"": [
      {
        ""id"": 11,
        ""language"": ""en"",
        ""value"": ""test value""
      }
    ]
  }
]";

            var serializer = new JsonDataSerializer();
            var result     = serializer.Deserialize <List <LocalizationResource> >(input);

            Assert.NotNull(result);
            Assert.Equal(1, result.Count);
        }
        public void TestDeserialization()
        {
            string input = @"[
              {
            ""id"": 1,
            ""resourceKey"": ""test-key"",
            ""modificationDate"": ""2016-01-01T00:00:00Z"",
            ""author"": ""migration-tool"",
            ""translations"": [
              {
            ""id"": 11,
            ""language"": ""en"",
            ""value"": ""test value""
              }
            ]
              }
            ]";

            var serializer = new JsonDataSerializer();
            var result = serializer.Deserialize<List<LocalizationResource>>(input);

            Assert.NotNull(result);
            Assert.Equal(1, result.Count);
        }
Пример #10
0
 public T Deserialize <T>(Stream stream)
 {
     return(_dataSerializer.Deserialize <T>(stream));
 }