c# - 从 JSON 本地存储图像。如何?

标签 c# json image windows-phone-8 local-storage

想知道你是否可以帮我解决这个问题...

我从一个 API 中检索了一些数据并将其放在一个列表中,现在,在反序列化之后...

现在,这个数据有一些图像我需要放在不同页面的 gridview 中,因为我被要求在本地保存数据(并偶尔检查更新)我想知道我必须做什么才能:

  1. 确保我得到照片(而不仅仅是名字)
  2. 将它保存到本地存储(带有它的 id),稍后制作 数据绑定(bind)资源...

这是我所拥有的:

public class GetFromJson
{

    private Medio medio = new Medio();
    public async void GetFullResponse(string address)
    {
        try
        {
            var client = new HttpClient();

            var uri = new Uri(address);
            var Response = await client.GetAsync(uri);
            var statusCode = Response.StatusCode;

            Response.EnsureSuccessStatusCode();

            var ResponseText = await Response.Content.ReadAsStringAsync();

            string myJson = ResponseText;

            medio.deserializeAndConvert(myJson);

        }

        catch (Exception ex)
        {
            Debug.WriteLine(ex);
        }
    }
}

然后,反序列化数据:

public class Medio
{
    public string id { get; set; }
    public string name { get; set; }
    public string type { get; set; }
    public string img { get; set; }
    public string medios_id { get; set; }

    public void deserializeAndConvert(string aaa)
    {
        JObject myGeneral = JObject.Parse(aaa);
        IList<JToken> results = myGeneral["resp"]["medios"].Children().ToList();

        IList<Medio> searchResults = new List<Medio>();
        foreach (JToken result in results)
        {
            Medio searchResult = JsonConvert.DeserializeObject<Medio>(result.ToString());
            searchResults.Add(searchResult);
            Debug.WriteLine(searchResults);

        }


        Debug.WriteLine(searchResults.Count);
        GlobalVariables.Medios = searchResults;
    }
}

有了它,我得到了我需要处理的数据......并且在应用程序开始时加载。

在那之后,当我们转到必须显示图像的页面时,我有这个:

public BankAndCards()
    {

        createGridView();
        this.InitializeComponent();
    }

    /// <summary>
    /// Invoked when this page is about to be displayed in a Frame.
    /// </summary>
    /// <param name="e">Event data that describes how this page was reached.
    /// This parameter is typically used to configure the page.</param>
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
    }

    void createGridView()
    {

        QueryPicturesToShow();
    }

    public void QueryPicturesToShow()
    {
        var pics = from medio in GlobalVariables.Medios
                         where medio.id != null
                         select new { Name = medio.name, Id = medio.id, Picture = medio.img};

        foreach (var item in pics)
        {
            Debug.WriteLine(item.Name);
            Debug.WriteLine(item.Id);
            Debug.WriteLine(item.Picture);

            savePicToDisk();
        }
    }

    private async void savePicToDisk()
    {
        //what should I do here?
    }
}

我从 API 获取的数据说(按顺序:名称、ID、图片)

Banco Galicia 2 /method/21030342

Bango River 3 /method/210321012

非常感谢!!!

最佳答案

我明白了... 出于某种原因,我无法看到文件夹中的图片,直到我拔下手机并重新插入...

public void QueryPicturesToShow()
    {

        var pics = from medio in GlobalVariables.Medios
                   where medio.img != null
                   select new { Name = medio.name, Id = medio.id, Picture = medio.img };

        foreach (var item in pics)
        {
            Debug.WriteLine(item.Name);
            Debug.WriteLine(item.Id);
            Debug.WriteLine(item.Picture);



            savePicToDisk(item.Picture, item.Name, item.Id);
        }
    }

                private async void savePicToDisk(string picAddress, string picName, string picId)
                {

                    StorageFolder folder = await KnownFolders.PicturesLibrary.CreateFolderAsync("workingFolder", CreationCollisionOption.OpenIfExists);

                    StorageFile file = await folder.CreateFileAsync((picName + picId + ".png"), CreationCollisionOption.ReplaceExisting);

                    string url = GlobalVariables.apiUrl + picAddress;


                    Debug.WriteLine(url);
                    HttpClient client = new HttpClient();

                    byte[] responseBytes = await client.GetByteArrayAsync(url);

                    var stream = await file.OpenAsync(FileAccessMode.ReadWrite);

                    using (var outputStream = stream.GetOutputStreamAt(0))
                    {
                        DataWriter writer = new DataWriter(outputStream);
                        writer.WriteBytes(responseBytes);
                        await writer.StoreAsync();
                        await outputStream.FlushAsync();

                    }
    }

所以,现在,我只需要知道如何将它们绑定(bind)到 gridView,所以,如果有人知道,您将为我节省很多时间(我想把它们放在一个列表中,但我我不确定是否会起作用)

谢谢!

关于c# - 从 JSON 本地存储图像。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32964353/

相关文章:

c# - 在 post 请求 asp.net mvc 中更改模型属性

c# - 如何在安全上下文中使用不安全代码?

c# - 如何配置 tfs 构建代理来构建发布配置文件?

c# - 在 C# 中一定数量的单词或字符后中断文本的方法?

javascript - 如何使用 jQuery 自动完成填充额外字段

html - 如何让一个 div 显示在另一个 div 的下方,并在其周围显示文字?

c++ - 更改 cv::remap 的 map 以包括调整大小

javascript - 如何将 svg 元素 ID 与 json 键匹配

java - 从 PHP/MySQL 到 Java/JSON

html - 如何在 Bootstrap 中使图像适合列