-1

私はJSon、特にJSon.Netを初めて使用します。Windows PhoneでLiveSDKを使用しようとしていますが、JSon応答の解析に問題があります。カレンダー情報を読み込もうとしていますが、解析できません。以下は、Jsonとクラス定義をダウンロードするためのコードです。'user'を定義する行で例外が発生します。

    void getCal_DownloadCompleted(object sender, LiveDownloadCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            using (var reader = new StreamReader(e.Result))
            {
                var json = reader.ReadToEnd();
                var user = JsonConvert.DeserializeObject<Calendar>(json);
            }
        }
    }

私のカレンダークラス

    [JsonObject(MemberSerialization.OptIn)]
public class Calendar
{    
    [JsonProperty(PropertyName="name")]
    public string Name{get; set;}
    [JsonProperty(PropertyName = "id")]
    public string Id{get; set;}
    [JsonProperty(PropertyName = "description")]
    public string Description{get; set;}
    [JsonProperty(PropertyName = "created_time")]
    public string CreatedTime{get; set;}
    [JsonProperty(PropertyName = "updated_time")]
    public string UpdatedTime{get; set;}
    [JsonProperty(PropertyName = "from")]
    public object From{get; set;}
    [JsonProperty(PropertyName = "is_default")]
    public bool IsDefault{get; set;}
    [JsonProperty(PropertyName = "subscription_location")]
    public string SubscriptionLocation{get; set;}
    [JsonProperty(PropertyName = "permissions")]
    public string Permissions{get; set;}
}

受信したJSon形式

    {
    "data": [
  {
     "id": "calendar.42d4dbc866f94c83849c88c6eb9985bc", 
     "name": "Birthday calendar", 
     "description": "If you have birthdays listed for your contacts, they'll appear on this calendar. You can add more birthdays, but you can't add other types of events.", 
     "created_time": "2011-08-05T19:41:04+0000", 
     "updated_time": "2011-08-05T19:41:04+0000", 
     "from": {
        "name": null, 
        "id": null
     }, 
     "is_default": false, 
     "subscription_location": null, 
     "permissions": "read"
  },{
     ...
  }

]}

LiveSDK GetAsync()を使用することができなかったので、代わりにDownloadAsync()を使用しました。このアプローチはより良いですか?

ありがとう

4

1 に答える 1

0

シリアル化クラスがJSONと一致していないようです。JSONは、定義したクラスdataの要素を含む配列であるという1つのプロパティを持つオブジェクトを返します。Calendar

次のような新しいクラスを追加してみてください。

[JsonObject(MemberSerialization.OptIn)]
public class AppointmentList
{
    [JsonProperty(PropertyName="data")]
    public List<Calendar> data {get; set;}
}

次のように逆シリアル化します。

var user = JsonConvert.DeserializeObject<AppointmentList>(json);
于 2012-09-13T01:09:16.663 に答える