2013-08-20 41 views
1

我無法弄清楚如何編寫一個在.NET中從JSON反序列化對象列表的類。如何反序列化一個沒有名字的JSON數組?

從JSON規範,我們瞭解到,這是有效的JSON:

[ 
     { 
     "precision": "zip", 
     "Latitude": 37.7668, 
     "Longitude": -122.3959, 
     "Address": "", 
     "City":  "SAN FRANCISCO", 
     "State":  "CA", 
     "Zip":  "94107", 
     "Country": "US" 
     }, 
     { 
     "precision": "zip", 
     "Latitude": 37.371991, 
     "Longitude": -122.026020, 
     "Address": "", 
     "City":  "SUNNYVALE", 
     "State":  "CA", 
     "Zip":  "94085", 
     "Country": "US" 
     } ] 

所以我寫這個類來處理反序列化:

using System; 
using System.Collections.Generic; 
using System.Web.Script.Serialization; 

namespace JsonRfc{ 

[Serializable] 
public class Location { 

    public string Precision; 
    public double Latitude; 
    public double Longitude; 
    public string Address; 
    public string City; 
    public string State; 
    public string Zip; 
    public string Country; 

    public Location(){} 

    public static Location DeserializedJson(string responseJson) 
    { 
     JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 
     return jsSerializer.Deserialize<Location>(responseJson); 
    } 
} 

[Serializable] 
public class Locations { 

    public List<Location> Location; 

    public Locations(){} 

    public static Locations DeserializedJson(string responseJson) 
    { 
     JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 
     return jsSerializer.Deserialize<Locations>(responseJson); 
    } 
} 
} 

反序列化對象爲null,儘管有有效的JSON傳遞該方法。

我嘗試過的其他事情失敗包括:使位置成爲一個數組而不是一個列表(so:public Location [] Location;),並反序列化到位置,即使Json包含位置數組。

那麼,.NET開發人員如何期望反序列化一組對象?我預計上述工作,而不是。

+0

這只是一個瘋狂的猜測。嘗試使'Locations'成爲一個列表。 '公開課地點:列表 {...' – climbage

回答

6

只是返回數組

var locs = Location.DeserializedJson(json); 

public class Location 
{ 

    public string Precision; 
    public double Latitude; 
    public double Longitude; 
    public string Address; 
    public string City; 
    public string State; 
    public string Zip; 
    public string Country; 

    public static Location[] DeserializedJson(string responseJson) 
    { 
     JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 
     return jsSerializer.Deserialize<Location[]>(responseJson); 
    } 
} 

PS:注意:[Serializable] s爲不必要的。

+1

謝謝!這工作。 – petFoo

相關問題