2012-06-29 11 views
27

Json.NET, "Case Duyarsız Mülkiyet Desantizasyonunu" listelenen özelliklerden biri olarak listeler. Belirlenen mülkün durumuyla eşleşmesi için bir girişimde bulunulduğunu ve bir eşleşme bulunmazsa büyük/küçük harfe duyarsız bir aramanın yapıldığını okudum. Ancak bu, varsayılan davranış olarak görünmüyor. JSON dizesi özellikleri ("Anahtar" ve "anahtar" ve "değer" vs "Değer") davasını eşleşecek şekilde değiştirilirse o zaman herşey iyiJson.NET Büyük/küçük harf duyarlı olmayan Özellik Destantasyonu

var result = 
    JsonConvert.DeserializeObject<KeyValuePair<int, string>>(
     "{key: 123, value: \"test value\"}" 
    ); 

// result is equal to: default(KeyValuePair<int, string>) 

: Aşağıdaki örneğe bakın

var result = 
    JsonConvert.DeserializeObject<KeyValuePair<int, string>>(
     "{Key: 123, Value: \"test value\"}" 
    ); 

// result is equal to: new KeyValuePair<int, string>(123, "test value") 

Büyük/küçük harf duyarlı olmayan serileştirme işlemlerini gerçekleştirmenin bir yolu var mı?

cevap

23

Bu bir hatadır. Vaka duyarsız özellik serimi, Json.NET'in bir JSON özelliğini "Anahtar" adıyla bir .NET sınıfının "Anahtar" veya "anahtar" üyesine eşleyebilmesini ifade eder.

Hata, KeyValuePair'in kendi JsonConverter'ını gerektirmesi ancak büyük/küçük harf duyarlı olmayan eşlemeyi atlamasıdır. case ifadesine küçük harf "anahtar" ve "değer" temel olarak ekleyin JSON okuma olduğunu

https://github.com/JamesNK/Newtonsoft.Json/blob/fe200fbaeb5bad3852812db1e964473e1f881d93/Src/Newtonsoft.Json/Converters/KeyValuePairConverter.cs

kullanın.

+1

Teşekkür kullanabilir ve düzeltebilir. KeyValuePair için bir Dönüştürücünün kullanıldığının farkında değildim. –

7

Bulduğum etkili bir yöntem, GetValue'u StringComparer parametresiyle kullanmaktı.

Yani, örneğin, Sen duyarsız vaka olarak 'Ad' özelliğine erişmeye çalışan

JObject contact; 
String strName = contact.GetValue('Name'); 

, sen açıklama için

JObject contact; 
String strName = contact.GetValue("ObjType", StringComparison.InvariantCultureIgnoreCase); 
İlgili konular