/// <summary> /// 输出语言包; /// </summary> public void Serialize(Stream stream, LanguagePackDescription description, LanguageSplitDictionary dictionary) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } if (dictionary == null) { throw new ArgumentNullException(nameof(dictionary)); } using (ZipOutputStream zipOutputStream = new ZipOutputStream(stream)) { zipOutputStream.IsStreamOwner = false; ZipEntry descZipEntry = new ZipEntry(descriptionFileName); zipOutputStream.PutNextEntry(descZipEntry); descriptionSerializer.Value.Serialize(zipOutputStream, description); SplitLanguageCollection collection = Split(dictionary); foreach (var value in collection.List) { string name = value.Key + dictionaryFileExtension; var keyValueList = value.Value; ZipEntry dictionaryZipEntry = new ZipEntry(name); zipOutputStream.PutNextEntry(dictionaryZipEntry); languageListSerializer.Value.Serialize(zipOutputStream, keyValueList); } } }
public SplitLanguageCollection Split(LanguageSplitDictionary dictionary) { SplitLanguageCollection collection = new SplitLanguageCollection(); foreach (var item in dictionary.Dictionary) { LanguageSplitDictionary.LanguageValue languageValue = item.Value; collection.Add(languageValue.Tag, item.Key, languageValue.Value); } return(collection); }
/// <summary> /// 反序列语言包内容; /// </summary> public LanguagePackDescription Deserialize(Stream stream, out LanguageSplitDictionary 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 LanguageSplitDictionary(); } string tag = Path.GetFileNameWithoutExtension(entry.Name); dictionary.Add(tag, value); } } } } if (description.HasValue) { return(description.Value); } else { throw new InvalidOperationException(); } }