如果我有一个类似这样的网页,
protected void Page_Load(object sender, EventArgs e)
{
List<string> items = new List<string>()
{
"test1",
"test2",
"test3"
};
Response.Write(items);
}
如何在另一端取回列表,例如我在这一端有一些代码,
static void Main(string[] args)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:50513/Default.aspx");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
}
如何将列表拉回来?
我必须使用asp .net页面,因为我必须使用第三方API的限制。
答案 0 :(得分:5)
要进一步扩展Joe的答案,最好的办法是使用JSON.NET来序列化和反序列化列表。由于Web只能来回发送字符串,因此JSON非常适合通过Web发送对象。您可以像这样序列化列表(使用JSON.NET):
List<string> items = new List<string>()
{
"test1",
"test2",
"test3"
};
var json = JsonConvert.SerializeObject(items);
Response.Write(json);
这将写入回复:
["test1", "test2", "test3"]
在接收端,使用:
var list = JsonConvert.DeserializeObject<List<string>>(json);
您将获得原始列表。至于图标,如果您无法传递链接并且实际上需要传递图标本身,您可以将文件序列化为Base64编码的字符串(然后解码),或者您可以使用BSON:
http://james.newtonking.com/archive/2009/12/26/json-net-3-5-release-6-binary-json-bson-support.aspx
我自己也没有这样做,所以我不能提供一个例子,抱歉。
答案 1 :(得分:1)
如果您一定要使用响应(例如,不能使用WCF),您可以执行类似的操作 但是,除非你做更多的事情,上面的响应将是列表的类型,而不是内容(items.ToString()将写入流,你需要迭代元素并逐个写入就像我记得的那样)
static void Main(string[] args)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:50513/Default.aspx");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using(var responseStreamReader = new StreamReader(response.GetResponseStream())
{
var response = responseStreamReader.ReadToEnd();
//do deserialization hereh
}
}
答案 2 :(得分:1)
您必须将列表序列化为一种格式,然后您可以将其反序列化回消费方列表中。在.NET中有很多方法可以做到这一点。一种选择是使用JSON.NET将JSON用作该格式。这样您就不会受到谁可以使用数据的限制。其他格式可以是XML,也可以使用.NET中内置的一个序列化程序。
示例:
服务器端:
List<string> items = new List<string>()
{
"test1",
"test2",
"test3"
};
string itemsString = JsonConvert.SerializeObject(items);
Response.Write(itemsString);
客户端:
WebClient webRequest = new WebClient()
string json = webRequest.DonwloadString("http://localhost:50513/Default.aspx");
List<string> items = JsonConvert.DeserializeObject<List<string>>(json);