2012-10-24 82 views
4

我正在嘗試執行POST,然後將JSON響應讀入字符串。將JSON響應流轉換爲字符串

我相信我的問題是我需要將自己的對象傳入DataContractJsonSerializer,但我想知道是否有某種方法可以將響應轉換爲關聯數組或某種鍵/值格式。

我的JSON的格式如下:{ 「許可證」: 「AAAA-AAAA-AAAA-AAAA」},我的代碼如下:

using (Stream response = HttpCommands.GetResponseStream(URL, FormatRegistrationPost(name, email))) 
{ 
    string output = new StreamReader(response).ReadToEnd(); 
    response.Close(); 

    DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(string)); 
    MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(output)); 
    string results = json.ReadObject(ms) as string; 

    licenseKey = (string) results.GetType().GetProperty("license").GetValue(results, null); 
} 

謝謝!

+0

Newtonsoft JSON可以反序列化爲Dictionary ..並且它可以很容易地導航。 – 2012-10-24 02:01:56

回答

17

我強烈建議考慮Newtonsoft.Json:

http://james.newtonking.com/pages/json-net.aspx

的NuGet:https://www.nuget.org/packages/newtonsoft.json/

添加引用您的項目,你只是包括使用後,在你的文件的頂部以下:

using Newtonsoft.Json.Linq; 

然後在您的方法中,您可以使用:

var request= (HttpWebRequest)WebRequest.Create("www.example.com/ex.json"); 
var response = (HttpWebResponse)request.GetResponse(); 
var rawJson = new StreamReader(response.GetResponseStream()).ReadToEnd(); 

var json = JObject.Parse(rawJson); //Turns your raw string into a key value lookup 
string licsene_value = json["licencse"].ToObject<string>(); 
+2

我確定其他答案都能正常工作,但這正是我想要去的地方。另外,我自己安裝了JSON NET dll,這是導致錯誤的原因,我強烈建議在Visual Studio中使用NUGET安裝程序擴展。 – Tom