2016-02-02 15 views
5

Zaimplementowałem metodę zwraca List<string> zgodnie z ciągiem json.deserializować puste ciąg do listy <string>

Działa dobrze, zdałem sobie sprawę, że próbuję deserializować pusty ciąg. To się nie psuje ani nie podnosi wyjątku. Zwraca wartość null zamiast pustego List<string>.

Pytanie, czy mogę dotknąć, aby zwrócić mi pustą wartość List<string> zamiast wartości null?

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

EDIT metoda Generic:

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()' jest nieprawidłowe; da konkretny typ dziedzicząc po 'System.Type', który nie jest tym, czego potrzebujesz. Chcesz 'if (type == typeof (Object)) tam. W następnym 'if' możesz również użyć' == '(dla spójności). –

Odpowiedz

6

Można to zrobić za pomocą operatora null coalescing (??):

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

Można też zrobić to przez ustawienie NullValueHandling do NullValueHandling.Ignore podobnie jak poniżej:

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

Dzięki. Czy nie ma skrótu, który oznacza to po wyjęciu z pudełka? – Jordi

+0

Dzięki Simon! Pozwól, że poproszę Cię o rozwiązanie tego problemu w formie ogólnej (zredagowałem mój post). Jak można się domyślić, używam jednej metody, aby deserializować dowolny ciąg jsonów, który otrzymuję. Tak więc specyficzny 'typeof (List )' jest tym, który typ C# pozwól mi. 'JsonConvert.DeserializeObject (zawartość, typ)' – Jordi