0

Sample Api という Web サーバーを呼び出しました。jsonまたはxmlのデータを解析できるようにしたいのですが、どちらでもいいので、表形式で表示します。これは私がこれまでに持っているものです。

私が望むのは、この文字列内のデータを解析し_responseAsStringてテーブルを表示できることだけです。私はそれを開始する方法がわからない、私は知っているJavaScriptSerialzer parseXXX = new Java...lizer(). 私を助けてください、または正しい方向に助けてください。

      public class Event
{
    public string event_key { get; set; }
    public string user_token { get; set; }
    public string event_set_key { get; set; }
    public string event_type { get; set; }
    public string event_date { get; set; }
    public string event_amount { get; set; }
    public string event_location_key { get; set; }
    public string event_location_name { get; set; }
    public string event_location_city { get; set; }
    public string event_location_state { get; set; }
    public string event_location_country { get; set; }
    public string event_acknowledged { get; set; }
}

     public ActionResult GetEvent()
     {
        try
        {

            string at = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa";
            string et = "KI2XfwQNByLPFdK4i3a74slLT7sjjzYRi9RR7zEtCoQ%3D";
            string t = "20111128183020";
            string _checkingUrl = String.Format("http://172.22.22.10/SampleAPI/Event/GetEvents?at={0}&et={1}&t={2}&responseFormat=json", at, et, t);
            System.Net.HttpWebRequest request=System.Net.WebRequest.Create(_checkingUrl) as System.Net.HttpWebRequest;
            System.Net.HttpWebResponse response=request.GetResponse() as System.Net.HttpWebResponse;
            System.IO.StreamReader _readResponse=new System.IO.StreamReader(response.GetResponseStream());
            //The encrypted dynamics response in either xml or json
            string _responseAsString=_readResponse.ReadToEnd();
            JavaScriptSerializer parseResponse = new JavaScriptSerializer();
            List<Event> events = parseResponse.Deserialize<List<Event>>(_responseAsString);

         // this below is to make sure i was receiving my json data.       
     return Content(_responseAsString);


            _readResponse.Close();
        }
        catch (Exception e)
        {
            //log error
        }
        return View();
    }

これは、http リクエストを行ったときに受け取る json データです。

"[{\"event_key\":\"cc2a1802-2b04-4530-ad50-0d4f0ed19dd3\",\"user_token\":\"40e62a11-40c4-408d-8cdd-1293cbaf9a41\",\"event_set_key\":\ "615017f2-ae28-4b8d-9def-cf043642b928\",\"event_type\":\"Arrival\",\"event_date\":\"6/20/2011 4:15:28 PM\",\"event_amount \":\"100\",\"event_location_key\":\"50fc1c22-d77b-4a91-b31d-da036827060b\",\"event_location_name\":\"Store2\",\"event_location_city\":\"ピッツバーグ\",\"event_location_state\":\"PA\",\"event_location_country\":\"US\",\"event_location_lat\":\"\",\"event_location_long\":\"\",\ "event_description\":\"\",\"event_acknowledged\":\"True\"},{\"event_key\":\"2ac9e25e-137c-4a72-8cc5-157d67ea66c1\",\"user_token\":\"58cb4fcd-e140-4232-88c9-06eecb95b63d\ ",\"event_set_key\":\"00710ca7-f5d7-4c7a-bbfb-95491ae278ef\",\"event_type\":\"到着\",\"イベント日付\":\"2011/9/23 4:15 :28 PM\",\"event_amount\":\"45\",\"event_location_key\":\"5a732dd5-9459-4cdd-a980-f3daf1a07343\",\"event_location_name\":\"Store4\", \"event_location_city\":\"Pittsburgh\",\"event_location_state\":\"PA\",\"event_location_country\":\"US\",\"event_location_lat\":\"\",\"event_location_long \":\"\",\"event_description\":\"\",\"event_acknowledged\":\"False\"},{\"event_key\":\"386b1fa1-11b2-48d9-b7f1-4bbe21ced487\",\"user_token\":\ "c3d8b7ff-d85f-42a8-98f6-e091b48c2280\",\"event_set_key\":\"dc55843b-f8cf-4e8a-9091-188ce0609fe1\",\"イベントタイプ\":\"到着\",\"イベント日付\" :\"9/18/2011 4:15:28 PM\",\"event_amount\":\"100\",\"event_location_key\":\"be6d4fb4-c0e3-4303-b70d-7a22b721aa56\",\ "event_location_name\":\"Store1\",\"event_location_city\":\"Pittsburgh\",\"event_location_state\":\"PA\",\"event_location_country\":\"US\",\"event_location_lat \":\"\",\"event_location_long\":\"\",\"event_description\":\"\",\"event_acknowledged\":\"False\"}]"

4

2 に答える 2

2

JSON Web サイトには、これに関する優れた情報があります。

古いブラウザーの場合はeval、次の文字列を使用します (動作させるためにいくつかの括弧を使用します)。

var myObject = eval('(' + myJsonText + ')');

そして最近、私たちは使用する傾向があります

JSON.parse(myJsonText);

そしてサーバー側、C#で

var serializer = new JavaScriptSerializer();
T obj = serializer.Deserialize<T>(myJsonText);
于 2012-06-14T16:09:36.463 に答える
1

初めに...

他の API から返された JSON メッセージを通過しているだけなら、応答文字列をそのまま返さないのはなぜですか (つまり、なぜ逆シリアル化する必要があるのでしょうか)。

 public ActionResult GetEvent()
 {
        string at = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa";
        string et = "KI2XfwQNByLPFdK4i3a74slLT7sjjzYRi9RR7zEtCoQ%3D";
        string t = "20111128183020";
        string _checkingUrl = String.Format("http://172.22.22.10/SampleAPI/Event/GetEvents?at={0}&et={1}&t={2}&responseFormat=json", at, et, t);
        System.Net.HttpWebRequest request=System.Net.WebRequest.Create(_checkingUrl) as System.Net.HttpWebRequest;
        System.Net.HttpWebResponse response=request.GetResponse() as System.Net.HttpWebResponse;
        using (var readResponse= new StreamReader(response.GetResponseStream()))
        {
             return Content(readResponse.ReadToEnd(), "application/json");
        }
}

それから読み進めてください

JSON テキスト リーダーを使用して、JSON メッセージを名前と値のペアのテーブルに分割することは可能ですが、あなたのケースではそれがポイントを逃していると思います。メッセージが定数の場合は、JSON メッセージの各要素を表すクラスを作成して解析します。json2csharpを使用して、そのようなクラスをスタブ化しました。

public class Event
{
    public string event_key { get; set; }
    public string user_token { get; set; }
    public string event_set_key { get; set; }
    public string event_type { get; set; }
    public string event_date { get; set; }
    public string event_amount { get; set; }
    public string event_location_key { get; set; }
    public string event_location_name { get; set; }
    public string event_location_city { get; set; }
    public string event_location_state { get; set; }
    public string event_location_country { get; set; }
    public string event_location_lat { get; set; }
    public string event_location_long { get; set; }
    public string event_description { get; set; }
    public string event_acknowledged { get; set; }
}

次に、お気に入りの JSON シリアライザーを使用して、これらのオブジェクトのリストに逆シリアル化します。

var serializer = new JavaScriptSerializer();
var events = serializer.Deserialize<List<Event>>(responseAsString);

(私は JSON.NET を好みます。上記のブロックに相当するものを次に示します)

var events = JsonConvert.DeserializeObject<List<Event>>(responseAsString);

実際にテキストのストリームを読み取り、名前と値のペアのテーブルを一般的に作成できるようにする必要がある場合は、JSON.NETLINQ-to-JSON または JsonTextReader を使用します。

于 2012-06-14T17:32:48.497 に答える