1

私はこの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ます。誰か助けてもらえますか?

4

1 に答える 1

2

JSONを逆シリアル化するときは、コレクションを返している場合でも、Ekspedisiのタイプを使用しています。このコード行を変更した場合:

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

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

これはあなたのタイプのコレクションです。あなたはもはや例外を受け取らないことに気付くでしょう。

于 2012-12-07T04:59:24.010 に答える