我创建一个zip文件,并在其中复制一个包含序列化对象列表的文件。文件编码采用 UTF8。然后我解压缩文件并尝试反序列化它,但会收到此错误:
解析值时遇到意外字符:。路径 '',第 0 行,位置 0
如果我使用 ASCII 编码而不是 UTF8,则不存在此问题。但我需要使用 UTF8。所以我想知道 DotNetZip 库是否没有完全支持 UTF8,或者我错过了其他东西。
为了重现错误:
Json 库位于: http://json.codeplex.com/
Zip 库位于: http://dotnetzip.codeplex.com/
创建一个简单的类"Dog":
public class Dog
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
然后使用此代码(最后一行将导致错误):
var list = new List<Dog>();
list.Add(new Dog { FirstName = "Arasd", LastName = "1234123" });
list.Add(new Dog { FirstName = "fghfgh", LastName = "vbnvbn" });
var serialized = JsonConvert.SerializeObject(list, Formatting.Indented);
var zipFile = new ZipFile(@"C:UsersdavikoDesktoptest.zip");
using (zipFile)
{
zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
zipFile.UpdateEntry("dogs.txt", serialized, UTF8Encoding.UTF8);
zipFile.Save();
}
var readFromZipFile = string.Empty;
using (var input = new MemoryStream())
{
using (zipFile)
{
var entry = zipFile["dogs.txt"];
entry.Extract(input);
}
using (var output = new MemoryStream())
{
input.CopyTo(output);
readFromZipFile = new UTF8Encoding().GetString( input.ToArray());
}
}
var deserialized = JsonConvert.DeserializeObject<List<Dog>>(readFromZipFile);
以下代码:
using (zipFile)
{
zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
zipFile.UpdateEntry("dogs.txt", serialized, UTF8Encoding.UTF8);
zipFile.Save();
}
将在执行时释放 zip文件。 因此,在尝试再次读取之前,您必须再次创建zipFile。