2016-02-02 11 views
5

Bir yöntem uygulayarak bir json dizesine göre List<string> döndürür.deserialize empty Bir Dizgiye Dize <string>

Boş bir dizeyi seri hale getirmeye çalıştığımı fark ettim. Kilitlenmez, bir istisna kaldırmaz. Boş bir List<string> yerine null değerini döndürür.

Sorun, List<string> yerine null değerini döndürmek için ne dokunabilirim?

return JsonConvert.DeserializeObject(content, typeof(List<string>)); 

DÜZENLEME Jenerik yöntemi: NullValueHandling için ayarlayarak Ayrıca yapabileceğini

return JsonConvert.DeserializeObject(content, typeof(List<string>)) ?? new List<string>(); 

:

public object Deserialize(string content, Type type) { 
    if (type.GetType() == typeof(Object)) 
     return (Object)content; 
    if (type.Equals(typeof(String))) 
     return content; 

    try 
    { 
     return JsonConvert.DeserializeObject(content, type); 
    } 
    catch (IOException e) { 
     throw new ApiException(HttpStatusCode.InternalServerError, e.Message); 
    } 
} 
+1

'type.GetType()' is; System.Type 'dan istediğiniz gibi olmayan bazı somut tipler verecektir. Eğer istiyorsan (type == typeof (Object)). Bir sonraki '' '' de '==' de kullanabilirsiniz (tutarlılık için). –

cevap

6

Sen null coalescing operatörünü (??) kullanarak bunu yapabilirsiniz NullValueHandling.Ignore bunu beğendi:

public T Deserialize<T>(string content) 
{ 
    var settings = new JsonSerializerSettings 
    { 
     NullValueHandling = NullValueHandling.Ignore  
    }; 

    try 
    { 
     return JsonConvert.DeserializeObject<T>(content, settings); 
    } 
    catch (IOException e) 
    { 
     throw new ApiException(HttpStatusCode.InternalServerError, e.Message); 
    } 
} 
+0

Teşekkürler. Kutunun dışında duran herhangi bir kısayol yok mu? – Jordi

+0

Teşekkürler Simon! Bu sorunu genel bir formda çözmenizi rica ediyorum (gönderimi düzenledim). Anlayacağınız gibi, aldığım json dizisini seri hale getirmek için bir yöntem kullanıyorum. Bu yüzden spesifik 'typeof (Liste )' hangisi C# olursa olsun bana izin ver. JsonConvert.DeserializeObject (içerik, tür) – Jordi