2017-07-14 3 views
-2

Was ich habe eine REST-Antwort im JSON-Format ist, das wie folgt aussieht: { "guid": "c75d06a8-a705-48ec-b6b3-9076becf20f4" }Deserialize JSON-Objekt in dem Typen System.Guid

Beim Versuch, diesen reponse String in ein Objekt vom Typ wie diese System.Guid deserialisieren: Newtonsoft.Json.JsonConvert.DeserializeObject(response.content, type); , die folgende Ausnahme ausgelöst:

nicht die aktuelle JSON-Objekt deserialisieren (zB { „name“: „Wert“}) in den Typ ‚System.Nullable`1 [System.Guid]‘, weil der Typ erfordert ein JSON primitiver Wert (zB String, Zahl, Boolean, NULL) um korrekt zu deserialisieren. Um diesen Fehler zu beheben, ändern Sie den JSON entweder in einen JSON-Grundwert (z. B. string, number, boolean, null) oder ändern Sie den deserialisierten Typ so, dass es ein normaler .NET-Typ ist (z. B. kein primitiver Typ wie ganze Zahl, keine Auflistung) Typ wie ein Array oder eine Liste), die aus einem JSON-Objekt deserialisiert werden können. JsonObjectAttribute kann auch zum Typ hinzugefügt werden, um die Deserialisierung von einem JSON-Objekt zu erzwingen. Weg 'guid', Linie 1, Position 8.

Jede Hilfe wird geschätzt!

+3

Der Fehler sagt Ihnen, warum es nicht funktioniert: Sie versuchen, 'zu deserialisieren {"guid": "guid"} 'als' Guid'. Der Guid-Typ hat keine guid-Eigenschaft. Deserialisieren Sie das Objekt und deserialisieren Sie dann den * Wert * der 'guid' Eigenschaft als' Guid'. –

+1

Sie können eine neue GUID aus einem Zeichenfolgenwert erstellen, wie der Fehler angibt. Wenn Sie diese Zeichenfolge extrahieren, versuchen Sie 'new Guid (myGuidString)' – Sal

Antwort

4

Wenn Sie nicht eine Klasse erstellen wollen nur den GUID-Wert enthalten, können Sie eine dynamische Variable verwenden:

string json = "{ \"guid\": \"c75d06a8-a705-48ec-b6b3-9076becf20f4\" }"; 
dynamic container = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json); 
Guid guid; 
Guid.TryParse(container.guid.ToString(), out guid); 
Console.WriteLine(guid);  
// c75d06a8-a705-48ec-b6b3-9076becf20f4 
0

Es ist ein bisschen seit ich diese Art von Sache gemacht habe, aber ich denke, die Antwort ist in Ihrer Fehlermeldung dort. Lass es als String zurückkommen. Überschreiben Sie in Ihrer Klasse die Eigenschaft guid string, um eine andere Eigenschaft des Typs GUID festzulegen und die Konvertierung und Fehlerbehandlung dort durchzuführen. Eine andere Möglichkeit besteht darin, einen Konstruktor zu verwenden, um hier zu helfen. Hoffe das gibt dir eine Richtung.