我有一个在3-4方法中序列化类对象的通用代码,所以我想在所有方法中为该代码创建一个通用函数并调用函数

我正在通过以下代码

进行此操作
DataContractJsonSerializer ser = new DataContractJsonSerializer(this.GetType());
                MemoryStream ms = new MemoryStream();
                ser.WriteObject(ms, this);

                json = Encoding.Default.GetString(ms.ToArray());

                ms.Close();

我想将这个公共代码放在seprate通用函数中,该函数返回Json字符串并接受整个类作为输入参数,因为我将整个类转换为Json对象,我尝试创建函数,如

public string GenerateJsonString(class C1)

但是这给了我关键字“class”的错误说这种类型是必需的

任何人都可以告诉我如何在单独的方法或函数中接受整个类对象

有帮助吗?

解决方案

你混淆了一个“类”用“对象”。序列化对象,该对象是特定类的实例(也称为“类型”)。

您可以创建一个方法,为所有对象提取.NET基类型的参数,“object”,如下所示:

public static string GenerateJsonString(object o) 
{
    DataContractJsonSerializer ser = new DataContractJsonSerializer(o.GetType());
    using (MemoryStream ms = new MemoryStream())
    {
        ser.WriteObject(ms, o);
        json = Encoding.Default.GetString(ms.ToArray());
        ms.Close();
        return json;
    }
}

其他提示

将参数键入“object”。您不能将类作为参数传递,只能传递类的实例 - 在OOP中将其称为“对象”

public string GenerateJsonString(object obj)

如果传递给此方法的所有对象都是从公共基类派生的类的实例,则可以使用多态并编写方法以接受作为基类实例的对象。否则,所有类都派生自 System.Object

目前尚不清楚“类对象”是什么意思。如果您指的是一个对象,那么正常传递对象的引用会传递“整个对象”。 (好吧,参考它)。你可以找到所有成员。

如果要传递类型本身,则应将参数声明为类型 - 但我怀疑这不是你想要的。

如果要编写一个接受任何对象的方法,只需将参数声明为类型对象

public string GenerateJsonString(object x)

我个人不会使用 Encoding.Default (这是系统特定的)将二进制文件转换为文本,顺便说一下 - 序列化程序真的使用什么编码?它是否允许您传入TextWriter(例如StringWriter)而不是流?

您可以接受一个对象。没有实例化类,并且无法将其传递给方法。

尝试使用Type而不是class

public string GenerateJsonString(Type t1)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top