Example #1
0
        /// <summary>
        /// 反序列语言包内容;
        /// </summary>
        public LanguagePackDescription Deserialize(Stream stream, out LanguageDictionary dictionary)
        {
            LanguagePackDescription?description = null;

            dictionary = null;

            using (ZipInputStream zipInputStream = new ZipInputStream(stream))
            {
                zipInputStream.IsStreamOwner = false;

                ZipEntry entry;
                while ((entry = zipInputStream.GetNextEntry()) != null)
                {
                    if (entry.IsFile)
                    {
                        if (!description.HasValue && entry.Name == descriptionFileName)
                        {
                            description = descriptionSerializer.Value.Deserialize(zipInputStream);
                        }
                        else if (entry.Name.EndsWith(dictionaryFileExtension))
                        {
                            var value = languageListSerializer.Value.Deserialize(zipInputStream);

                            if (dictionary == null)
                            {
                                dictionary = new LanguageDictionary();
                            }

                            dictionary.Add(value);
                        }
                    }
                }
            }

            if (description.HasValue)
            {
                return(description.Value);
            }
            else
            {
                throw new InvalidOperationException();
            }
        }