1

zip ファイルを作成し、シリアル化されたオブジェクトのリストを含むファイルをコピーします。ファイルのエンコーディングは UTF8 です。次に、ファイルを解凍してデシリアライズしようとしましたが、次のエラーが発生します。

値の解析中に予期しない文字が検出されました: 。パス ''、行 0、位置 0

UTF8 の代わりに ASCII エンコーディングを使用すると、問題は発生しません。ただし、UTF8 を使用する必要があります。そのため、DotNetZip ライブラリが UTF8 を完全にサポートしていないのか、それとも他に何か不足しているのか疑問に思っています。

エラーを再現するには:

Json ライブラリはhttp://json.codeplex.com/にあります。

Zip ライブラリはhttp://dotnetzip.codeplex.com/にあります。

単純なクラス「犬」を作成します。

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);
4

1 に答える 1

0

次のコード:

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

実行時にzipFileを破棄します。そのため、zipFile を再度作成してから、再度読み取る必要があります。

于 2013-01-25T08:40:11.383 に答える