2012-12-07 19 views
1

我要读这个JSON:如何阅读Windows Phone上的这个JSON?

[ 
    {"id":"2","code":"jne","name":"JNE"}, 
    {"id":"5","code":"pcp","name":"PCP"}, 
    {"id":"1","code":"pos","name":"Pos Indonesia"}, 
    {"id":"6","code":"wahana","name":"Wahana"} 
] 

我已经试过这样:

[DataContract] 
public class Ekspedisi 
{ 
    [DataMember] 
    public int id { get; set; } 
    [DataMember] 
    public String code { get; set; } 
    [DataMember] 
    public String name { get; set; } 
} 

这:

public static Ekspedisi[] res; 
string link5 = "http://www.ongkoskirim.com/api/0.2/?id=OAL66afd139a386fee6dc5a5597abd7daba&q=expedition"  
WebClient client = new WebClient(); 
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);  
client.OpenReadAsync(new Uri(link5), UriKind.Absolute); 

这:

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    try 
    { 
     var ser = new DataContractJsonSerializer(typeof(Ekspedisi)); 
     res = (Ekspedisi[])ser.ReadObject(e.Result); 
     for (int i = 0; i < length; i++) 
     { 
      Debug.WriteLine(res[i].id+","+res[i].name); 
     } 
    } 
    catch (Exception ex) 
    { 
     Debug.WriteLine(ex.Message); 
     Debug.WriteLine(ex.StackTrace); 
    } 
} 

但总是显示invalidCastException。谁能帮我?

回答

2

当您反序列化JSON时,即使您正在返回一个集合,您仍然使用Ekspedisi类型。如果改变这行代码:

var ser = new DataContractJsonSerializer(typeof(Ekspedisi)); 

var ser = new DataContractJsonSerializer(typeof(IEnumerable<Ekspedisi>)); 

这是你的类型的集合;你会发现你不会再收到异常。

+0

非常感谢,这是非常有帮助的,我不再收到异常:) –