反序列化为json解压缩字符串时出错

时间:2013-01-25 08:25:48

标签: c# utf-8 json.net dotnetzip

我创建了一个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:\Users\daviko\Desktop\test.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);

1 个答案:

答案 0 :(得分:0)

以下代码:

    using (zipFile)
    {
        zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
        zipFile.UpdateEntry("dogs.txt", serialized, UTF8Encoding.UTF8);
        zipFile.Save();
    }

将在执行时释放zipFile。因此,在尝试再次阅读之前,必须再次创建zipFile。