3

私は単純なクラスを持っています:

public class site
        {
            public string URL { get; set; }
        }

これは、http ハンドラー内に存在します。現在、json をこのハンドラーに投稿し、文字列から URL を取得するために逆シリアル化しようとしています。ただし、デシリアライズ部分に問題があります。

次のようにフォーマットされたjsonを持つ文字列「jsonString」があります。

[{"URL":"http://www.google.com/etc/"}]

デシリアライズのコードは次のとおりです。

JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();

        string jsonString = String.Empty;

        HttpContext.Current.Request.InputStream.Position = 0;
        using (StreamReader inputStream = new StreamReader(HttpContext.Current.Request.InputStream))
        {
            jsonString = inputStream.ReadToEnd();
        }

        site currSite = new site();
        currSite = jsonSerializer.Deserialize<site>(jsonString);

        //set response types
        HttpContext.Current.Response.ContentType = "application/json";
        HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;


       //send response 
       HttpContext.Current.Response.Write(jsonSerializer.Serialize(currSite.URL));  

次に、currSite.URL を使用して応答を送信しようとしていますが、失敗しています。ここで何が欠けていますか?currSite.URL の代わりに jsonString の応答を送信すると機能するため、逆シリアル化部分にあるとかなり確信しています。

4

2 に答える 2

4

json文字列は、それが単一のエンティティではなく配列であることを示しています。次のように逆シリアル化する必要があります。

var result = jsonSerializer.Deserialize<site[]>(jsonString);

そしてresult[0].Url、あなたが探しているものが含まれている必要があります。

アップデート

サンプルコードの追加:

 string json = @"[{""URL"":""http://www.google.com/etc/""}]";

 JavaScriptSerializer js = new JavaScriptSerializer();
 var result = js.Deserialize<site[]>(json);
 Console.WriteLine(result[0].URL);

プリント: http ://www.google.com/etc/

于 2013-01-04T16:22:29.240 に答える
0

単に応答としてURL(文字列のみ)を返送しようとしている場合は、値をシリアル化する必要はありません。メソッドcurrSite.URLに渡すだけです。Write

currSiteそれ以外の場合は、URLだけでなく、応答のオブジェクト全体をシリアル化する必要があると思います。それはすべて、発信者が期待している応答の種類(指定していない)によって異なります。

于 2013-01-04T16:21:52.557 に答える