2016-08-30 3 views
-2

Ich schreibe eine Klasse, die ein Objekt serialisiert und deserialisiert. Ich möchte in der Lage sein, diese Klasse mit jedem Objekt zu verwenden, das ich an sie übergebe.C# Objekt an eine Klasse senden

Wie übergebe ich das Objekt an die Klasse? Ich muss in der Lage sein, auf die Klassenfelder für die Instanz, die ich es sende, zugreifen zu können, und außerdem muss ich auf die Definition der Klasse zugreifen, um den Text wieder in ein Objekt zu deserialisieren.

ex.

//mainpage.cs code 
private void sendObjectToSerialize() 
{ 
    var db = new DatabaseHandler(); 
    var myCar = new Car(); 
    myCar.Make = "Chevy"; 
    string ObjectString = db.SerializeObject(myCar); 
} 

private void SendStringToBeDeserialized() 
{ 
    String myString = "SomeSerializeString" //this string would have been serialized using above Obect myCar 
    var db = new DatabaseHandler(); 
    var myCar = new Car(); 
    var myCar = db.DeserializeStringToObject(String,myCar); 
} 

//Database Handler Code 
public string SerializeObject(Object myObject) 
{ 
    var myNewObject = new myObject();//doesn't work - error myObject used as a variable not a type 
    //...serialize the object passed to this function 
} 

public Object DeserializeStringToObject(String ObjectString ,Object myObject) 
{ 
    var myNewObject = new myObject;//error myObject used as a variable not a type 
    //convert string to Object of type myObject... 
    return mynewObject; 
} 
+3

bitte bearbeiten Sie dies und reparieren Sie Ihre schreckliche Formatierung es ist ein Chaos zu lesen .. und Sie brauchen nicht die Eingabe Code hier Tags überhaupt – MethodMan

+0

wurde formatiert, als ich es eingegeben habe. irgendwie passierte das, als ich auf submit klickte. Lassen Sie mich versuchen, es zu korrigieren. –

+0

Sie müssen Ihren Code auch debuggen 'var myNewObject = new myObject;' sollte das nicht 'var myNewObject = new myObject();' auch wenn Sie das Objekt übergeben und Sie haben 'var my NewObject' warum don ' t du es nur dem Param zuweisen, der gerade weitergegeben wird ..? auch wenn show code zeige bitte alle relevanten code .. zum beispiel die class definition von 'Car' möchten sie nachschlagen wie man' Activator.CreateInstance' – MethodMan

Antwort

0

Hier ist mein Serializer Klassencode:

// serializer.cs 
using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Runtime.Serialization.Json; 
using System.Text; 
using System.Threading.Tasks; 

namespace QMC1.Handlers 
{ 
    public class Serializer 
    { 

Dies wird eine Zeichenfolge zurück, die in einer Datenbank oder Datei gespeichert werden kann. Derzeit scheint es, nur mit einem einzelnen Objekt zu arbeiten und nicht ein ObservableCollection<Object>

public String ConvertObjectToJSONString<myObjectType>(myObjectType myObject) 
{ 
    string content = String.Empty; 
    var js = new DataContractJsonSerializer(typeof(myObjectType)); 
    var ms = new MemoryStream(); 
    js.WriteObject(ms, myObject); 
    ms.Position = 0; 

    var reader = new StreamReader(ms); 
    content = reader.ReadToEnd(); 
    return content; 
} 

die Zeichenfolge mit dem obigen Code erstellt Dies wird nehmen und senden Sie es als voll funktionsfähigen Object wieder an den Aufrufer zurück. Es wird nur in den ursprünglichen Objekttyp zurück konvertiert. Derzeit scheint es nur mit einem einzigen Objekt zu funktionieren und nicht mit einem ObservableCollection<Object>.

Aufruf von Code aus einer beliebigen Datei - am Beispiel eines Automodells. (Auto Modellparameter sind nicht wichtig für dieses Beispiel)

Serializer ser = new Serializer(); 

Konvertieren Sie Ihr Objekt in einen JSON-String

myCarString = ser.ConvertObjectToJSONString<Car>(myCar).ToString(); 

Zeichenfolge in Ihrer Datenbank oder Datei speichern.

Ziehen Sie die Zeichenfolge aus der Datenbank oder Datei und weisen Sie den Wert myCarString zu. Wandeln Sie Ihre Zeichenfolge in ein Objekt um.

myCar = ser.ConvertStringToObject<Car>(myCarString, "NameSpace.Car"); 

Verwenden Sie Ihr neues Objekt wie gewohnt.