C# 从JSON下载多个文件

C# 从JSON下载多个文件,c#,json,gridview,download,uwp,C#,Json,Gridview,Download,Uwp,我让aplkasi报摊在gridview上显示“judul”、“cover”和“harga”(数据取自下面的json) gridview上显示的示例数据: gridview选中后,单击下载按钮,它将下载上面json(红色圆圈内)上捆绑包中的所有数据。但是,我有一个问题,即:捆绑包中的数据只能下载最新的数据,而以前的数据不能下载 这是最重要的 如何处理 注: 使用syncfusion旋转木马模块的库外观 在主页面上显示自定义对话框时,我使用Callisto模块 这取决于如何解析JSON中的

我让aplkasi报摊在gridview上显示“judul”、“cover”和“harga”(数据取自下面的json)

gridview上显示的示例数据:

gridview选中后,单击下载按钮,它将下载上面json(红色圆圈内)上捆绑包中的所有数据。但是,我有一个问题,即:捆绑包中的数据只能下载最新的数据,而以前的数据不能下载

这是最重要的

如何处理

注:

  • 使用syncfusion旋转木马模块的库外观
  • 在主页面上显示自定义对话框时,我使用Callisto模块

这取决于如何解析JSON中的数据并将其绑定到GridView。
我想你应该有一个内部有子类的类,比如:

    public class BundleGroup : ObservableCollection<BundleData>
{
    public BundleGroup(IEnumerable<BundleData> items) : base(items)
    {
    }

    public string idfile { get; set; }
    public string judul { get; set; }
    //  etc.
}
public类BundleGroup:observetecollection
{
公共捆绑包组(IEnumerable items):基本(items)
{
}
公共字符串idfile{get;set;}
公共字符串judul{get;set;}
//等等。
}

在这种情况下,单击“下载”后,您将能够循环浏览BundleGroup中的项目集合并下载所有项目。

测试了您的示例,我认为问题在于您的
StoreAll()方法中的此代码:

if (bundleObj.ValueType == JsonValueType.Array)
{
    JsonArray bundle = bundleObj.GetArray();
    foreach (JsonValue groupValue1 in bundle)
    {
        JsonObject groupObject1 = groupValue1.GetObject();

        bundleName = groupObject1["bundle_file"].GetString();
        pathFile = groupObject1["path_file"].GetString();
    }
}
然后:

file.BundleName = bundleName;

if (file.Tipe == "0")
{
    file.BundlePath = pathFile + bundleName + ".pdf";
}
else if (file.Tipe == "1")
{
    file.BundlePath = pathFile + bundleName;
}
if (licenseInformation.ProductLicenses[file.SKU].IsActive)
{
    file.Harga = "Purchased";
}
我可以理解,您想在
GridView
的每个项目中存储
BundleName
BundlePath
信息以便下载,但是您的
BundleName
BundlePath
都是
BukuAudio
类中定义的字符串类型:

public string BundleName { get; set; }

public string BundlePath { get; set; }
因此,当您浏览
捆绑包
组时,最新的捆绑包将覆盖上一个捆绑包,这就是为什么您只能下载最新的捆绑包文件

我认为您可以更改
BundleName
BundlePath
的类型,例如:

public List<string> BundleName { get; set; }

public List<string> BundlePath { get; set; }
file.BundleName = new List<string>();
file.BundlePath = new List<string>();
if (bundleObj.ValueType == JsonValueType.Array)
{
    JsonArray bundle = bundleObj.GetArray();
    foreach (JsonValue groupValue1 in bundle)
    {
        JsonObject groupObject1 = groupValue1.GetObject();

        bundleName = groupObject1["bundle_file"].GetString();
        pathFile = groupObject1["path_file"].GetString();

        file.BundleName.Add(bundleName);
        file.Tipe = tipe;
        if (file.Tipe == "0")
        {
            file.BundlePath.Add(pathFile + bundleName + ".pdf");
            //file.BundlePath = pathFile + bundleName + ".pdf";
        }
        else if (file.Tipe == "1")
        {
            file.BundlePath.Add(pathFile + bundleName);
            //file.BundlePath = pathFile + bundleName;
        }
    }
}
但在完成此操作之后,您还需要修改“下载”部分代码的代码,可能还需要修改示例中的其他部分,如show download info代码

在这里,我不会在
ItemView\u ItemClick
方法和
downloadClicked
方法中发布修改后的代码,因为它们不是这里的关键点,我修改了
OnNavigatedTo
事件,如下所示下载:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    //GC.Collect();
    BukuAudio dlList = e.Parameter as BukuAudio;
    if (dlList != null)
    {
        //DownloadBuku(dlList.BundlePath);
        //downloadfilename.Text = dlList.BundleName;
        //Uri uri = new Uri(dlList.BundlePath);
        //string filename = System.IO.Path.GetFileNameWithoutExtension(uri.LocalPath);
        //downloadfilename.Text = String.Format("Unduh '{0}'", filename);
        foreach (var path in dlList.BundlePath)
        {
            DownloadBuku(path);
            int i = 0;
            downloadfilename.Text = dlList.BundleName.ElementAt(i);
            i++;
            Uri uri = new Uri(path);
            string filename = System.IO.Path.GetFileNameWithoutExtension(uri.LocalPath);
            downloadfilename.Text = String.Format("Unduh '{0}'", filename);
        }
        DownloadProgress.Visibility = Visibility.Visible;
        downloadfilename.Visibility = Visibility.Visible;
        statusdownload.Visibility = Visibility.Visible;
    }
    else
    {
        DownloadProgress.Visibility = Visibility.Collapsed;
        downloadfilename.Visibility = Visibility.Collapsed;
        statusdownload.Visibility = Visibility.Collapsed;
    }
}

现在,您可以在单击一个项目后下载每个捆绑包

无法理解“只能下载最新数据,而不能下载以前的数据”下的含义。请更清楚地解释,例如:如果json上的“捆绑包”中有3个数据,则只能下载第三个(最后一个)数据,但不能下载第一个和第二个数据。如何处理它?谁能给我多个下载文件的示例吗?对于上面的代码,是在一个新类或LibraryPage中生成的?如果您有一些用于解析JSON数据的类,并且稍后将数据绑定到GridView,您可以像我建议的那样在这个类中有一些组。我不知道如何解析json,但通常可以在代码中这样做:file.BundleName=new List();file.BundlePath=新列表();一个像这样的错误:如何解决这个问题?@Rose,因为我不能使用
synflusion
包,我把你的代码复制到我的样本中,你可以找到我的样本,可能还有其他问题,我没有对这个样本进行太多测试。对于这个问题,您需要剪切
BukuAudio file=new BukuAudio()在该代码块中,并在
file.BundleName=new List()之前粘贴;file.BundlePath=新列表()。我有一个问题,如何按顺序从第一个文件下载到最后一个文件?因为当使用这样的代码时,下载的文件不是按顺序(取决于文件大小)。如何直接克服这个问题(无延迟时间)?因为当你使用这段代码时,下载第一个文件和下一个文件会有几秒钟的延迟。)@Rose,下载并不取决于文件大小,文件会一起下载,所以如果文件较大,看起来这个文件是稍后下载的。要按顺序下载文件,可以将
DownloadBuku
方法更改为任务,并使用异步方式
await DownloadBuku(路径)调用该方法,但在测试演示时,还应更改显示下载信息的代码。我想我已经解决了你在这个问题上的问题,如果你还有其他问题,请打开一个新的线程。