5

POST を実行してから、JSON 応答を文字列に読み取ろうとしています。

私の問題は、自分のオブジェクトを DataContractJsonSerializer に渡す必要があることだと思いますが、応答を連想配列または何らかのキー/値形式にする方法があるかどうか疑問に思っています。

私のJSONは次のようにフォーマットされています: {"license":"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);
}
4

2 に答える 2

18

Newtonsoft.Jsonを調べることを強くお勧めします:

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

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

プロジェクトへの参照を追加した後using、ファイルの先頭に次のものを含めるだけです。

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 license_value = json["license"].ToObject<string>();
于 2012-10-24T02:02:54.240 に答える
1

あなたは辞書を使ってこのようなことをすることができます

Dictionary<string, string> values = 
JsonConvert.DeserializeObject<Dictionary<string, string>>(json);

またはあなたがすでにあなたのオブジェクトを知っているならこのようなもの

var yourobject = JsonConvert.DeserializeObject<YourObject>(json);

このツールで

http://james.newtonking.com/projects/json/help/

ここで参照 JsonConvert.DeserializeObjectを使用してJsonをC#POCOクラスに逆シリアル化します

于 2012-10-24T02:03:25.113 に答える