2017-05-08 2 views
0

Wenn ich ein Wörterbuch habe und z. eine Instanz einer Klasse MyClass zu diesem Wörterbuch, wie stelle ich sicher, dass eine Deserialisierung und Serialisierung des Wörterbuchs die Klasse und nicht ein JObject enthält?Deserialisieren und serialisieren eines Wörterbuchs <string, object> mit JSON.NET

internal class MyClass 
{ 
    public string MyProperty { get; set; } 
} 

[TestMethod] 
public async Task DebugTest() 
{ 
     Dictionary<string, object> testDictionary = new Dictionary<string, object>(); 
     testDictionary.Add("testkey", new MyClass() { MyProperty = "testproperty" }); 
     string json = JsonConvert.SerializeObject(testDictionary); 
     Dictionary<string, object> restoredDictionary = JsonConvert.DeserializeObject<Dictionary<string, object>>(json); 
    } 

Das testDictionary enthält die MyClass, aber das restoredDictionary enthält ein JObject.

Update: Bitte beachten Sie, dass ich String, Objekt verwenden muss. Also ich bin wirklich auf der Suche nach einer Möglichkeit zu sagen, Json.Net zu einer Klasse und nicht JObject zu konvertieren

+0

Versuchen Sie 'var restoredDictionary = JsonConvert.DeserializeObject > (json); ' –

+0

Ersetzen Sie Ihre mit testDictionary und restauredDictionary mit' Dictionary '..Warum wollen Sie Objekt verwenden? – Vandita

+0

Ich möchte String, Objekt verwenden, um verschiedene Arten von Objekten (wie MyClassA, MyClassB usw.) zu fangen. Es ist Teil eines größeren Objektmodells mit ObjectConverters. Dieser Teil funktioniert gut, nur das Wörterbuch ist ein Problem. – MortenGR

Antwort

0

Das Problem war, dass Json.Net hat keine Möglichkeit zu wissen, dass eine Zeichenfolge, Objekt deserialied und serialisiert wieder sein sollte ein bestimmter Typ Glücklicherweise gibt es ein Attribut namens TypeNameHandling, das Json.Net anweist, den Typ in der JSON-Zeichenfolge zu speichern. Diese Option zum Serialisieren und Deserilisieren funktionierte perfekt :-).

Verwandte Themen