2012-04-07 27 views
1

我想簡單地從URL中讀取一些JSON數據,然後將其轉換爲POCO類的集合,但我似乎無法弄清楚我做錯了什麼。反序列化POCO數組與JsonFX

這裏是JSON數據的樣本,因爲它是從URL抓取:

[ 
{ 
"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" 
} 
] 

我可以與Web客戶端就好了這一數據。

我設置了我的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分鐘。使用谷歌搜索無濟於事。任何幫助,將不勝感激!

回答

2

我從來沒有用過JsonFX但你可以嘗試Json.Net或內置JavaScriptSerializer。兩者都沒有任何問題。

var jObj1 = JsonConvert.DeserializeObject<Race[]>(jsonstr); 
var jobj2 = new JavaScriptSerializer().Deserialize<Race[]>(jsonstr); 
+0

我結束了使用JavaScirptSerializer和它的工作就像一個魅力。我在這裏嘗試了其他幾個建議,但JsonFX沒有與其中任何一個工作。謝謝! – 2012-04-07 20:52:18

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); 
0

我敢打賭,你需要指定datacontract並在您的自定義類型數據成員屬性jsonFX承認它。

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; } 
} 
0

你可能需要告訴它嘗試解析您的日期作爲微軟風格的日期時間:

var jsonReader = new JsonReader(
    new DataReaderSettings(
     new PocoResolverStrategy(), 
     new MSAjaxDateFilter()));