Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将解压缩字符串反序列化为json时出错_C#_Utf 8_Json.net_Dotnetzip - Fatal编程技术网

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

C# 将解压缩字符串反序列化为json时出错,c#,utf-8,json.net,dotnetzip,C#,Utf 8,Json.net,Dotnetzip,我创建了一个zip文件,并在其中复制了一个包含序列化对象列表的文件。文件编码为UTF8。然后我解压文件并尝试对其进行反序列化,但会出现以下错误: 分析值时遇到意外字符:. 路径“”,第0行,位置0 如果使用ASCII编码而不是UTF8,则不存在此问题。但我需要使用UTF8。因此,我想知道DotNetZip库是否没有对UTF8的完全支持,或者可能我遗漏了其他东西 为了重现错误: var list = new List<Dog>();

我创建了一个zip文件,并在其中复制了一个包含序列化对象列表的文件。文件编码为UTF8。然后我解压文件并尝试对其进行反序列化,但会出现以下错误:

分析值时遇到意外字符:. 路径“”,第0行,位置0

如果使用ASCII编码而不是UTF8,则不存在此问题。但我需要使用UTF8。因此,我想知道DotNetZip库是否没有对UTF8的完全支持,或者可能我遗漏了其他东西

为了重现错误:

       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);
Json库位于:

Zip库位于:

创建一个简单的类“Dog”:

然后使用此代码(最后一行将导致错误):

var list=newlist();
添加(新狗{FirstName=“Arasd”,LastName=“1234123”});
添加(新狗{FirstName=“fghfgh”,LastName=“vbnvbn”});
var serialized=JsonConvert.serialized对象(列表,格式化,缩进);
var zipFile=new zipFile(@“C:\Users\daviko\Desktop\test.zip”);
使用(zipFile)
{
zipFile.CompressionLevel=Ionic.Zlib.CompressionLevel.BestCompression;
UpdateEntry(“dogs.txt”,序列化,UTF8Encoding.UTF8);
Save();
}
var readFromZipFile=string.Empty;
使用(var input=new MemoryStream())
{
使用(zipFile)
{
var entry=zipFile[“dogs.txt”];
条目。摘录(输入);
}
使用(var output=newmemoryStream())
{
输入。复制到(输出);
readFromZipFile=new UTF8Encoding().GetString(input.ToArray());
}
}
var deserialized=JsonConvert.DeserializeObject(readFromZipFile);
以下代码:

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

将在zipFile执行时处理它。因此,在您再次尝试阅读之前,您必须再次创建zipFile。

谢谢您的回答,但这与我遇到的问题无关。如果我使用或不使用“使用”,结果是一样的。
    using (zipFile)
    {
        zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
        zipFile.UpdateEntry("dogs.txt", serialized, UTF8Encoding.UTF8);
        zipFile.Save();
    }