2010-02-24 57 views
2

如果我有一個網頁,做這樣的事情,的Response.Write(對象)

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

回答

5

要擴展更多的喬的回答,做的最好的事情就是用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

雖然我沒有這樣做,所以我不能提供一個例子,對不起。

+0

感謝序列化到Base64似乎是答案。我有一些基本的東西工作。現在到圖標上。 – peter 2010-02-25 02:02:27

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 
     } 
    } 
1

您必須序列列表到的格式,你然後可以反序列化回消費方的列表。在.NET中有很多方法可以做到這一點。一種選擇是使用JSON作爲使用JSON.NET的格式。這樣你就不會受到誰可以使用數據的限制。其他格式可以是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); 
+0

謝謝。我可能也需要發送一些圖標。 Json會爲此工作嗎?或者使用二進制串行器會更好?對Json不太瞭解。 – peter 2010-02-24 03:25:27

+0

JSON是描述對象的非常簡單的符號。如果你有二進制數據,那麼最好使用二進制串行器。還有BSON,但我沒有用過它。 http://en.wikipedia.org/wiki/BSON – 2010-02-24 04:14:56

+1

如果您需要發送圖標,則應將路徑發送到圖標,而不是圖標本身。 – 2010-02-24 07:16:46