2011-01-12 17 views
10

Kontrol etmediğim ancak çıktısını C# ile, tercihen JSON.Net kullanarak tüketmem gereken bir API var. Ben planlıyorduAnahtar kelimelerle çakışan öznitelikleri içeren JSON yanıtlarını serileştirme

[ 
    { 
     "media_id": 36867, 
     "explicit": 0 
    } 
] 

bir sınıf şöyle olması:

class Media { 
    public int media_id; 
    public int explicit; 
} 

Ve serisini:

var l = JsonConvert.DeserializeObject<List<Media>>(s); 

Maalesef "açık" İşte

bir örnek tepkidir C# anahtar kelimesi, bu yüzden derleyemez.

class Media { 
    public int media_id; 
    public int explicit_; 
} 

... ve bir şekilde tepki C# özelliklerine bağlıyor map:

Benim sonraki tahminim sınıfını değiştirmektir.

Bunu nasıl yapmalıyım yoksa tamamen yanlış yola mı gidiyorum?

Bunu yapmanın bir yolu varsa, yanıtın sadece "açık" kelimesini görmezden gelmek için sorun olmaz mı?

cevap

17

JSON.Net kullanılır, ancak docs here bakılırsa, ben az önce XmlSerialization ile ne yaparım yapmanız gereken bilemiyorum mı: Bir öznitelik ekle JSON özellik aranmalıdır nasıl anlatmak için:

class Media { 
    [JsonProperty("media_id")] 
    public int MediaId; 
    [JsonProperty("explicit")] 
    public int Explicit; 
} 
+0

Şerefe, bunun üzerinden atladım çünkü toC, serileştirmeyi istediğimde "serileştirme" dedi. İşaretçi için teşekkürler. –

10

C#

class Media { 
    public int media_id; 
    public int @explicit; 
} 

değil bu Json.NET ile oynuyor, ne kadar emin ama Yapardım sen örneğin bir @ ile kaçan tarafından (aynen böyle çalışabilirlik durumlar için) özel amaçlı sözcük adlarla üyelerine tanımlamanızı sağlar Hayal etmesi gerektiğini (çünkü @ bir alan ve aslında alan adının bir parçası değil).

+0

Ben Ne dediğini anlıyorum, ama daha fazla açıklama için bir bağlantı sağlayabilir? Bunu şu değişimle denedim: "var x = yeni Medya(); x.explicit = true;" Derleme yapmazdım, ama "x. @ Explicit = true" yaptı. –

+0

Kodunuzda, "@explicit" ifadesini kullanırsınız. Ama bu ikilide gerçek bir "açık" ismiyle derlenir. Yani JSON.Net serileştirme/serileştirme kodu "açık" değil "açık" olarak görünüyordu. Tıpkı kodunuzda "\ n" yi kullandığınız gibi, ancak ikilide bir satır beslemesine derlenir. –

+0

Anlıyorum, teşekkürler. JsonProperty cevabını hala kabul etti, çünkü bu alana özgü ve daha genel durumları da ele alıyor. –

1

Aşağıdaki kod benim için çalıştı.

class JsonRpc { 
    public string id; 
    public string method; 
    public string[] @params; 
} 
JsonConvert.DeserializeObject<JsonRpc> (data) 

herkese teşekkürler

İlgili konular