-1

WP7 で JSON API を C# に逆シリアル化しようとしています。そうするのに助けが必要です。簡単に修正できると確信していますが、それを見ることはできません。

JSON データは次のようになります。

{
"chartDate" : 1349564400, 
"retrieved" : 1349816722, 
"entries" : 
[
    {
        "position" : 1, 
        "previousPosition" : 0, 
        "noWeeks" : 1, 
        "artist" : "Rihanna", 
        "title" : "Diamonds", 
        "change" : 
        {
            "direction" : "none",
            "amount" : 0,
            "actual" : 0
        }
    }, 

これはhttp://json2csharp.com/を使用して次のように変換されます

    public class Change
  {
      public string direction { get; set; }
      public int amount { get; set; }
      public int actual { get; set; }
  }

  public class Entry
  {
      public int position { get; set; }
      public int previousPosition { get; set; }
      public int noWeeks { get; set; }
      public string artist { get; set; }
      public string title { get; set; }
      public Change change { get; set; }
  }

  public class RootObject
  {
      public int chartDate { get; set; }
      public int retrieved { get; set; }
      public List<Entry> entries { get; set; }
  }

アプリケーションで [フィードの取得] ボタンをクリックすると、次のコードを使用していますが、JSON オブジェクトを型 "System.Collections.Generic.List`1[Appname.RootObject にデシリアライズできません"というエラーが返されます。

以下は、Mainpage.cs からの私の C# です。

using System;
using System.Collections.Generic;
using System.Net;
using System.Windows;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Reactive;
using Newtonsoft.Json;

namespace JsonDemo
{
  public partial class MainPage : PhoneApplicationPage
  {
    // Constructor
    public MainPage()
    {
  InitializeComponent();
}

private void Load_Click(object sender, RoutedEventArgs e)
{
  var w = new SharpGIS.GZipWebClient();
  Observable.FromEvent<DownloadStringCompletedEventArgs>(w, "DownloadStringCompleted")
    .Subscribe(r =>
    {
        var deserialized = JsonConvert.DeserializeObject<List<RootObject>>(r.EventArgs.Result);
      PhoneList.ItemsSource = deserialized;
    });
  w.DownloadStringAsync(new Uri("http://apiurl.co.uk/labs/json/"));
}

} }

4

1 に答える 1

2

問題の(正しい)jsonをr.EventArgs.Result返す場合、これは機能するはずです:

var deserialized = JsonConvert.DeserializeObject<RootObject>(r.EventArgs.Result);

- 編集 -

string json = @"{
    ""chartDate"": 1349564400,
    ""retrieved"": 1349816722,
    ""entries"": [{
        ""position"": 1,
        ""previousPosition"": 0,
        ""noWeeks"": 1,
        ""artist"": ""Rihanna"",
        ""title"": ""Diamonds"",
        ""change"": {
            ""direction"": ""none"",
            ""amount"": 0,
            ""actual"": 0
        }
    }]
    }";

var deserialized = JsonConvert.DeserializeObject<RootObject>(json);
于 2012-10-09T21:26:28.023 に答える