2016-02-02 12 views
5

Ich habe eine Methode implementiert eine List<string> nach einem JSON String zurückgegeben.deserialize leere String zu einer Liste <string>

Es funktioniert gut bis ich festgestellt habe, dass ich versuche, eine leere Zeichenfolge zu deserialisieren. Es stürzt weder ab noch löst es eine Ausnahme aus. Es gibt einen null Wert anstelle eines leeren List<string> zurück.

Die Frage ist, was könnte ich berühren, um mir eine leere List<string> statt null Wert zurückgibt?

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

EDIT Allgemeine Methode:

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()' ist falsch; Es gibt einen konkreten Typ, der von 'System.Type' erbt, was nicht das ist, was Sie wollen. Du willst 'if (type == typeof (Object))' da. Im nächsten 'if' können Sie auch' == '(für Konsistenz) verwenden. –

Antwort

6

Sie können es tun, um die null coalescing Operator (??):

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

Sie es auch tun könnte, indem die NullValueHandling Einstellung NullValueHandling.Ignore wie folgt:

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

Danke. Gibt es keine Abkürzung, die für das Out-of-the-Box steht? – Jordi

+0

Danke Simon! Lassen Sie mich Sie bitten, dieses Problem in einer generischen Form zu lösen (ich habe meinen Beitrag bearbeitet). Wie Sie herausfinden können, verwende ich eine Methode, um die JSer-Zeichenfolge, die ich erhalte, zu deserialisieren. Also der spezifische 'typeof (Liste )' ist welcher Typ C# mich lassen. 'JsonConvert.DeserializeObject (Inhalt, Typ)' – Jordi

Verwandte Themen