C# 从JSON本地存储图像。如何?
不知道你能不能在这里帮我 我从API中检索了一些数据,现在,在反序列化它之后,我将它放在了一个列表中 现在,这些数据中有一些图像我需要放在另一个页面的C# 从JSON本地存储图像。如何?,c#,json,image,windows-phone-8,local-storage,C#,Json,Image,Windows Phone 8,Local Storage,不知道你能不能在这里帮我 我从API中检索了一些数据,现在,在反序列化它之后,我将它放在了一个列表中 现在,这些数据中有一些图像我需要放在另一个页面的gridview中,由于我被要求在本地保存数据(并偶尔检查更新),我想知道我必须做些什么: 确保我了解情况(不仅仅是姓名) 将其保存到本地存储(带有其id),以便在以后的存储中 数据绑定资源 以下是我所拥有的: public class GetFromJson { private Medio medio = new Medio();
gridview
中,由于我被要求在本地保存数据(并偶尔检查更新),我想知道我必须做些什么:
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;
}
}
公共类媒体
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共字符串类型{get;set;}
公共字符串img{get;set;}
公共字符串medios_id{get;set;}
public void反序列化和转换(字符串aaa)
{
JObject myGeneral=JObject.Parse(aaa);
IList results=myGeneral[“resp”][“medios”].Children().ToList();
IList searchResults=新列表();
foreach(JToken result in results)
{
Medio searchResult=JsonConvert.DeserializeObject(result.ToString());
searchResults.Add(searchResult);
Debug.WriteLine(搜索结果);
}
Debug.WriteLine(searchResults.Count);
GlobalVariables.Medios=搜索结果;
}
}
有了这些,我就得到了我需要处理的数据,这些数据在应用程序运行时被加载
之后,当我们转到我必须显示图像的页面时,我有以下内容:
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?
}
}
公共银行卡()
{
createGridView();
this.InitializeComponent();
}
///
///当此页面即将显示在框架中时调用。
///
///描述如何到达此页面的事件数据。
///此参数通常用于配置页面。
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
}
void createGridView()
{
QueryPicturesToShow();
}
public void QueryPicturesToShow()
{
var pics=来自GlobalVariables.Medios中的medio
其中medio.id!=null
选择新{Name=medio.Name,Id=medio.Id,Picture=medio.img};
foreach(pics中的var项目)
{
Debug.WriteLine(项目名称);
Debug.WriteLine(item.Id);
调试写入线(项目图片);
savePicToDisk();
}
}
私有异步void savePicToDisk()
{
//我在这里该怎么办?
}
}
我从API获得的数据显示(按顺序:名称、id、图片)
加利西亚银行2/方法/21030342
班戈河3/方法/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();
}
}
因此,现在,我只需要知道如何将它们绑定到gridView,因此,如果有人知道,您将为我节省大量时间(我想将它们放在列表中,但我不确定是否有效)
谢谢 我会实现某种缓存。检索JSON和图像后,将图像存储在缓存中。当您以后需要图像时,请从缓存中检索它。如果图像过时,请再次从源中检索它。顺便说一句,你的目标环境是什么?WPF、Silverlight、Windows Phone?请为您的问题添加适当的标签。WP8.1。。。很抱歉,我没有标记I该图像如何在JSON中序列化?Base64?似乎,从JSON中,我得到了图片的“地址”,下载/显示在网格中……下面是一个例子:因此,它改变了整个主题:如何从web下载和保存图片并显示在网格中(至少如何下载图片并保存在可访问的地方)