2016-10-17 1 views
1

Ich möchte ServiceStack JsonSerializer verwenden.ServiceStack Deserializing Interface-Eigenschaft null in Objekt

Ich gründe IncludeTypeInfo Eigenschaft wahr, bevor ich meine object.And meine serialisierte Zeichenfolge enthält alle Typinformationen wie „__type“ serialisiert.“Interfacesb ....

Als ich, dass die Zeit deserialisieren String möchte . Schnittstelle Eigenschaft null, obwohl ich Typ-Informationen in meinem serialisierten string.Is es eine andere Konfiguration Notwendigkeit haben, wenn das Objekt deserialisiert

ich zwei Methoden JsonSerializer.SerializeToString und JsonSerializer.DeSerializeFromString

Beispiel:

JsConfig.IncludeTypeInfo = true; 

Public Class MyObject 
{ 
Public string a{get;set;} 
Public interface b{get;Set;} 
} 
+0

Könnten Sie vollständige Codebeispiel hinzufügen, damit ich überprüfen konnte? Welche Version von Service Stack verwenden Sie? –

+0

Ich benutze 3.9, meinen Code-Block einfach so Serialize-Klasse, die Schnittstelle enthält und deserialize es zurück – Bilgehan

Antwort

1

Zunächst ist die Version 4. * die weiterentwickelte Version. 3.9 wird von niemandem aktiv gepflegt.

-Test auf servicestack.text 4.50

Zweitens glaube ich das nicht diese Eigenschaft gemacht wurde es praktisch Objekte deserialisieren zurück.

i in 4.50 tat das gleiche und es ist deserialisieren einfach nicht: enter image description here

Alternative Lösungen

Hier können Sie lesen, was auf, wenn Sie die Typen aus der json wollen: https://stackoverflow.com/a/21603948/1275832.

Wenn Sie den Typ haben:

ich den folgenden Code als eine alternative Lösung verwenden (beachten Sie seine eine Erweiterungsmethode) als Lösung für Laufzeit dynamische Typen (v4.50):

public static object FromJson(this string json, Type deserializeType) 
{ 
    return typeof(JsonSerializer).GetMethod("DeserializeFromString", BindingFlags.Static) 
     .MakeGenericMethod(deserializeType) 
     .Invoke(null, new[] { json }); 
} 

und Verwendung als: var object = (MyInterface)jsonString.FromJson(Type.GetType(AssemblyQualifiedNameString));

+1

Ich fand mein Problem, ich habe eine readonly -Eigenschaft, ohne set-Methode ist esnt deserialized.Und zweiten Punkt ändere ich meine Eigenschaft Typ Schnittstelle zu Objekt. – Bilgehan

Verwandte Themen