1

URLからJSONデータを読み取り、それをPOCOクラスのコレクションに変換したいのですが、何が間違っているのか理解できないようです。

URLから取得されたJSONデータのサンプルを次に示します。

[
{
"Name":"Together As One Run",
"Location":"Parkville, MO",
"ScheduledAt":"\/Date(1334984400000)\/",
"URL":"http://www.runningintheusa.com/Race/View.aspx?RaceID=36667"
},
{
"Name":"Lean Green Running Machine 5K Run/Walk and 1 Mile Run",
"Location":"Springfield, MO",
"ScheduledAt":"\/Date(1335589200000)\/",
"URL":"http://www.runningintheusa.com/Race/View.aspx?RaceID=53945"
},
{
"Name":"Festival of Miles",
"Location":"St. Louis, MO",
"ScheduledAt":"\/Date(1338440400000)\/",
"URL":"http://www.runningintheusa.com/Race/View.aspx?RaceID=53901"
},
{
"Name":"Miles Against Melanoma",
"Location":"Saint Charles, MO",
"ScheduledAt":"\/Date(1338613200000)\/",
"URL":"http://www.runningintheusa.com/Race/View.aspx?RaceID=53939"
}
]

このデータはWebClientで問題なく取得できます。

JsonFXリーダーを次のように設定しています。

var json = new JsonReader(new DataReaderSettings(new PocoResolverStrategy()));

これが私のPOCOクラスです:

public class Race {
  public String Name { get; set; }
  public String Location { get; set; }
  public DateTime ScheduledAt { get; set; }
  public String URL { get; set; }
}

いくつかの方法でJSONデータを逆シリアル化しようとしましたが、何も機能していないようです。

//reader is an instance of StreamReader
var content = reader.ReadToEnd();
//nope
//var output = json.Read<Race>(content);
//nope
//var output = json.Read<Race[]>(content);

これは簡単なことである必要があります、私はただ解決策を見つけることができません。私は約30分を過ごしました。グーグルは役に立たない。どんな助けでもいただければ幸いです!

4

4 に答える 4

2

JsonFXを使用したことはありませんが、 Json.Netまたは組み込みを試すことができますJavaScriptSerializer。どちらも問題なく動作します。

 var jObj1 = JsonConvert.DeserializeObject<Race[]>(jsonstr);
 var jobj2 = new JavaScriptSerializer().Deserialize<Race[]>(jsonstr);
于 2012-04-07T18:48:41.467 に答える
0

おっと編集、タイトルを読んでいませんでした。なぜjsonfxを使用しているのですか?多分リストを試してみませんか?

var output = json.Read<List<Race>>(input);

これは、JSON.Netでそれを実行する方法の有効な例です。

JSON.NETを使用する必要があります。組み込みのどのクラスよりも高速で、辞書をシリアル化するのにはるかに優れています。

Nugetを使用する

> Install-Package Newtonsoft.Json

List<Race> deserializedRaces = JsonConvert.DeserializeObject<List<Race>>(jsonString);
于 2012-04-07T18:46:15.360 に答える
0

jsonFXがそれを認識するためには、カスタムタイプのdatacontract属性とdatamember属性を指定する必要があるに違いありません。

using System.Runtime.Serialization;
[DataContract]
public class Race {
  [DataMember]
  public String Name { get; set; }
  [DataMember]
  public String Location { get; set; }
  [DataMember]
  public DateTime ScheduledAt { get; set; }
  [DataMember]
  public String URL { get; set; }
}
于 2012-04-07T18:54:25.710 に答える
0

おそらく、日付をMicrosoftスタイルの日時として解析するように指示する必要があります。

var jsonReader = new JsonReader(
    new DataReaderSettings(
        new PocoResolverStrategy(),
        new MSAjaxDateFilter()));
于 2012-04-07T19:33:23.800 に答える