回复于(对象)

时间:2010-02-24 02:16:22

标签: c# .net asp.net

如果我有一个类似这样的网页,

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的限制。

3 个答案:

答案 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);