【问题标题】:c# send object to a classc# 将对象发送到类
【发布时间】:2016-08-30 20:33:59
【问题描述】:

我正在编写一个对对象进行序列化和反序列化的类。 我希望能够将这个类与我传递给它的任何对象一起使用。

如何将对象传递给类?我将需要能够访问我发送它的实例的类字段,并且我还需要访问类的定义以便将文本反序列化回对象。

例如

//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;
}

【问题讨论】:

  • 请编辑这个并修复你可怕的格式,它读起来很乱......而且你根本不需要在此处输入代码标签
  • 我输入时已格式化。不知何故,当我点击提交时发生了这种情况。让我们尝试纠正它。
  • 你还需要调试你的代码var myNewObject = new myObject;不应该是var myNewObject = new myObject();,如果你传入对象并且你有var my NewObject你为什么不把它分配给正在传递的参数..?同样在显示代码时请显示所有相关代码..例如Car的类定义您可能想查找如何使用Activator.CreateInstance
  • 感谢Edit MethodMan

标签: c# object serialization


【解决方案1】:

这是我的序列化程序类代码:

// 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
    {

这将返回一个字符串,然后可以将其保存到数据库或文件中。 目前它似乎只适用于单个对象而不是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;
}

这将获取使用上述代码创建的字符串,并将其作为功能齐全的Object 再次返回给调用者。它只会转换回原始对象类型。目前它似乎只适用于单个对象而不是ObservableCollection&lt;Object&gt;

        public myObjectType ConvertStringToObject<myObjectType>(string CarObjectString, string myObjectName)
        {
            myObjectType myObject = (myObjectType)Activator.CreateInstance(Type.GetType(myObjectName));

            var js = new DataContractJsonSerializer(typeof(myObjectType));    
            byte[] byteArray = Encoding.UTF8.GetBytes(CarObjectString);

            var ms = new MemoryStream(byteArray);
            myObject = (myObjectType)js.ReadObject(ms);    
            return myObject;  
        }
    }
}

从任何文件调用代码 - 以汽车模型为例。 (本例中车型参数无关紧要)

Serializer ser = new Serializer();

将您的对象转换为 JSON 字符串

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

将字符串保存到数据库或文件中。

从数据库或文件中提取字符串并将其值分配给myCarString。将您的字符串转换为对象。

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

像往常一样使用你的新对象。

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多