我有服务网址:please check it,它返回json字符串。
我不知道如何使用C#
然后。通过链接,您可以在json数据中看到"href"
。它有.png
个网址。我想将该图像保存到我的本地磁盘。
问题
如何从此service
如何将图像从网址保存到本地磁盘
答案 0 :(得分:2)
我想你需要服务器的服务请求而不是客户端的服务请求;如果是这样一个直截了当的方式
string json = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/export?bbox=9153621.1267%2C-644273.9207%2C13435472.9966%2C3637577.9492&bboxSR=&layers=&layerdefs=&size=800%2C600&imageSR=&format=png&transparent=false&dpi=&time=&layerTimeOptions=&f=pjson");
HttpWebResponse response = null;
try
{
response = (HttpWebResponse)request.GetResponse();
var responseStream = response.GetResponseStream();
if ((responseStream != null) && responseStream.CanRead)
{
using (var reader = new System.IO.StreamReader(responseStream))
{
json = reader.ReadToEnd();
}
}
}
finally
{
if (response != null)
{
response.Close();
}
}
图像可以通过相同的方式获得。
对于Json,我建议JSON.NET。
答案 1 :(得分:1)
使用数据合约和DataContractJsonSerializer
:
using System.Runtime.Serialization;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Net;
[DataContract]
internal class GISData
{
[DataMember]
public string href;
[DataMember]
public int width;
[DataMember]
public int height;
[DataMember]
public GISDataExtent extent;
[DataMember]
public string scale;
}
[DataContract]
internal class GISDataExtent
{
[DataMember]
public string xmin;
[DataMember]
public string ymin;
[DataMember]
public string xmax;
[DataMember]
public string ymax;
[DataMember]
public GISDataExtentSpatialReference spatialReference;
}
[DataContract]
internal class GISDataExtentSpatialReference
{
[DataMember]
public string wkid;
}
从您的网址中提取JSON字符串 - 反序列化对象并下载您的图片。
WebClient webClient;
webClient = new WebClient();
string json = webClient.DownloadString(@"http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/export?bbox=9153621.1267%2C-644273.9207%2C13435472.9966%2C3637577.9492&bboxSR=&layers=&layerdefs=&size=800%2C600&imageSR=&format=png&transparent=false&dpi=&time=&layerTimeOptions=&f=pjson");
MemoryStream stream = new MemoryStream((Encoding.UTF8.GetBytes(json)));
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(GISData));
stream.Position = 0;
GISData data = (GISData)ser.ReadObject(stream);
stream.Close();
webClient = new WebClient();
webClient.DownloadFile(data.href, "C:/" + data.href.Substring(data.href.LastIndexOf("/") + 1)); //Save only the filename and not the entire URL as a name.
答案 2 :(得分:1)
使用以下代码:
using Newtonsoft.Json;
......
string url = "...";
var webClient = new WebClient();
var s = webClient.DownloadString(url);
dynamic d = JsonConvert.DeserializeObject(s);
var href = ((string) d.href);
webClient.DownloadFile(href, @"d:\file.png");
请注意,您的png文件不存在:)
如果需要,您可以创建POCO课程。但如果你只需要下载一个文件 - 可能就不需要了。