2016-08-10 5 views
1

Ich versuche einfach Serialization Eigenschaften zu verwenden, um Daten in einer Zeichenfolge vorübergehend zu speichern. Ich habe viele Methoden getestet und diese Funktionen sind diejenigen, die ich verwenden könnte (da ich in meinen realen Klassen ObjectId habe, funktionieren viele Serialisierungsklassen nicht).Warum ist mein deserialisiertes Objekt null?

Doch selbst mit einem einfachen Test funktioniert es nicht, meine Deserialisierung ist null:

public class MyClass 
{ 
    public string test = "bob"; 
} 

static public void function() 
{ 
    MyClass test = new MyClass(); 

    string data = Newtonsoft.Json.JsonConvert.SerializeObject(test); 
    object testb = Newtonsoft.Json.JsonConvert.DeserializeObject(data); 
    MyClass testa = Newtonsoft.Json.JsonConvert.DeserializeObject(data) as MyClass; 
} 

Ergebnisse sind (debugger):

datab : { "test": "bob"} 
testa is null. 

Warum? Wie kann ich ein Objekt wie testb mit Schlüssel und Wert in meinen korrekten Typ konvertieren?

Antwort

2

Problem ist die Art und Weise Sie Type-Casting sind.

Versuchen Sie dieses heraus, und es sollte

MyClass testa = Newtonsoft.Json.JsonConvert.DeserializeObject<MyClass>(data); 

das sein soll alles gut funktionieren.

1

Verwenden Sie die generische de-serialise Methode:

MyClass testa = Newtonsoft.Json.JsonConvert.DeserializeObject<MyClass>(data); 
1

Sie sollten Ihre Klassen mit öffentlichen Getter und Setter definieren:

public class MyData 
{ 
    public string Name {get; set;} 
} 

Dann eine Instanz der Klasse erstellen und serialisiert es:

var data = new MyData() { Name = "bob" }; 

var serialized = JsonConvert.SerializeObject(data); 
Console.WriteLine(serialized); 

Wenn Sie deserialisieren, können Sie DeserializeObject<T> verwenden, um Sagen Sie JSON.NET, welcher Typ deserialisiert werden soll:

var deserialized = JsonConvert.DeserializeObject<MyData>(serialized); 
Console.WriteLine(deserialized.Name); 

Live fi ddle: https://dotnetfiddle.net/w4B1IK