0

したがって、Json オブジェクトをサーバーに送信し、それを PersonalPreferences と呼ばれる厳密に型指定されたユーザー型オブジェクトに変換したいと考えています。

JSはこちら

{
"PersonalPreferences": [
    {
        "FavoriteFood": "Pasta with butter and cheese"
    },
    {
        "FavoriteSport": "Submission Wrestling"
    },
    {
        "FavoriteGame": "Starcraft 2"
    },
    {
        "FavoriteMusic": "Hip Hop"
    }
]
}

送信している Json オブジェクトに一致するクラスを作成しました。

    [DataContract]
public class PersonalPreferences
{
    [DataMember]
    public string FavoriteFood { get; set; }

    [DataMember]
    public string FavoriteSport { get; set; }

    [DataMember]
    public string FavoriteGame { get; set; }

    [DataMember]
    public string FavoriteMusic { get; set; }

    public PersonalPreferences()
    {
    }

    public PersonalPreferences(string favoriteFood, string favoriteGame, string favoriteMusic, string favoriteSport)
    {
        this.FavoriteFood = favoriteFood;
        this.FavoriteGame = favoriteGame;
        this.FavoriteMusic = FavoriteMusic;
        this.FavoriteSport = favoriteSport;

    }
}

そして、リクエストを受け取り、それをユーザー型オブジェクトに変換するハンドラーは次のとおりです。私の問題は、 PersonalPreference オブジェクトが空であることです。jsSerializer.Deserialize は空のコンストラクターを呼び出し、Json オブジェクトの値は PersonalPreference オブジェクトに渡されません。Json 値がリクエストに文字列として存在することを確認しました。

    [WebService(Namespace = "http://localhost:53243")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class JSonTestHandler : IHttpHandler, System.Web.SessionState.IReadOnlySessionState
{

    public void ProcessRequest(HttpContext context)
    {
        string jsonData = new StreamReader(context.Request.InputStream, System.Text.Encoding.UTF8).ReadToEnd();
        var jsSerializer = new JavaScriptSerializer();
        var personalPreferences = jsSerializer.Deserialize(jsonData, typeof(PersonalPreferences));
    }}
4

1 に答える 1

0

提供されたjson形式の文字列に問題があるようです。次のjson形式の文字列で確認すると、正常に機能します。

{"FavoriteFood": "バターとチーズのパスタ"、 "FavoriteSport": "Submission Wrestling"、 "FavoriteGame": "Starcraft 2"、 "FavoriteMusic": "Hip Hop"}

Json形式の文字列をどのように生成しましたか?

于 2012-09-21T12:13:30.253 に答える